OS X: cree un directorio bin personal (~ / bin) y ejecute scripts sin especificar su ruta completa

19

Entonces, lo que estoy tratando de hacer es crear un bindirectorio personal en mi carpeta de inicio. Creé la siguiente carpeta:

/Users/thi/bin

Puse mis scripts en esta carpeta, pero si escribo en la Terminal:

myScript

No corre

Me dijeron que tenía que exportar esta ruta bin, algo relacionado con echo $PATH, pero no sé cómo hacerlo.

Thi G.
fuente
ver también hacia el final de apple.stackexchange.com/a/98626
nohillside

Respuestas:

20

Debe agregar lo siguiente al archivo ~/.profile:

export PATH=/Users/thi/bin:$PATH

Luego source ~/.profile

Tenga en cuenta que es posible que necesite crear este archivo, y debido a que comienza con un archivo .puede no estar visible en el buscador para editarlo a través de una aplicación como un editor de texto. Para enumerar todos los archivos, incluidos los ocultos, use:

ls -la ~/
tfjgeorge
fuente
Si agrego export PATH = / Users / thi / bin: $ PATH a mi archivo .bashrc, ¿funcionará? ¿Es correcto?
Thi G.
12
Mejor uso en $HOME/binlugar de /Users/thi/bin. Luego podrá copiar su configuración a otra máquina, donde su nombre de usuario es quizás diferente.
lhf
Si escribo en la terminal: PATH = $ HOME / bin: $ PATH y luego escribo: export PATH. ¿Hará el truco?
Thi G.
1
Si lo hace, cambiará la configuración ahora, pero no en futuras botas. Para cambiar la ruta de una manera que sobreviva a los reinicios, debe incluir esos comandos en su .profilearchivo.
Daniel
1
Genial, gracias a todos por las respuestas. Agregué export PATH=$HOME/bin:$PATHa mi $HOME/.bash_profile.
Thi G.
10

Si usa bash, agregue una línea como esta para ~/.bash_profile:

PATH=~/bin:$PATH

PATHestá marcado para la exportación de forma predeterminada, por lo que no necesita usarlo export.

Si ambos ~/.bash_profiley ~/.profileexisten, fiesta sólo lee ~/.bash_profilecuando se ejecuta un intérprete interactivo de ingreso. ~/.profileTambién es utilizado por otros shells que podrían no comprender las mismas opciones de configuración que bash.

Terminal e iTerm 2 abren nuevos shells como shells de inicio de sesión de forma predeterminada. Cuando se invoca bash como un shell de inicio de sesión interactivo, se lee ~/.bash_profilepero no ~/.bashrc. Los emuladores de terminal en otras plataformas a menudo abren nuevos shells como shells sin inicio de sesión, por ejemplo, bash lee ~/.bashrcpero no ~/.bash_profile. Usuarios de OS X suelen utilizar ~/.bash_profilecomo archivo de configuración correspondiente al personal ~/.bashrcen otras plataformas, pero también es común a la fuente ~/.bashrcde ~/.bash_profileo para contar terminal o iTerm 2 para abrir nuevas conchas como cáscaras de no inicio de sesión.

También puede cambiar la ruta de forma más global en /etc/pathso /etc/launchd.conf, pero en muchos contextos la ruta seguirá siendo la predeterminada /usr/bin:/bin:/usr/sbin:/sbin. Y solo he necesitado realmente cambiar la ruta en shells y editores de texto.

Lri
fuente
Genial, gracias por la respuesta. Agregué export PATH=$HOME/bin:$PATHa mi $HOME/.bash_profile.
Thi G.
No necesita exportar , y ambos ~(cuando no $HOMEestán entre comillas) y se expanden antes de la asignación de variables, tanto cuando se usa exportar o una asignación simple.
Lri
Lauri Ranta, ¿qué prefieres personalmente .bash_profileo .profile? ¿O tienes un .bashrcen tu directorio personal?
Thi G.
Solía ​​usar solo .bash_profile, pero ahora uso .bashrc como mi archivo de configuración principal y mi .bash_profile solo contiene . ~/.bashrc. Los nuevos shells se abren como shells sin inicio de sesión en el modo de shell en emacs y en tmux. No usaría .profile como mi archivo de configuración principal, porque también lo leen otros shells como ksh.
Lri
3

Por lo general, colocaría rutas adicionales después, $PATHcomo PATH=$PATH:/$HOME/binporque si no desea reemplazar otro ejecutable con el mismo nombre que podría estar /bin, etc.

Nic MacKenzie
fuente
44
Uno podría argumentar fácilmente que pondría $HOME/binal principio exactamente por esa razón. Pero la clave es que el orden de los directorios es $PATHimportante y que el shell elegirá el primer comando coincidente. Gracias por señalar esto.
nohillside