¿Cómo hacer que un script de shell sea global?

82

Estoy en el sistema operativo 10.6 de Mac y estoy tratando de aprender un par de cosas sobre las secuencias de comandos de shell. Entiendo cómo guardar un script de shell y convertirlo en ejecutable, pero me pregunto qué puedo hacer o dónde puedo guardar el archivo para hacerlo global (es decir, accesible sin importar en qué carpeta esté).

Por ejemplo, si guardo un archivo .sh en el directorio / Users / username / y lo hago ejecutable, solo puedo ejecutar ese script en ese directorio específico. Si navego a / Users / username / Downloads, por ejemplo, no puedo ejecutar el script.

Además, sería útil cualquier sugerencia de recursos para aprender más sobre secuencias de comandos de shell. Gracias

hombre cebra
fuente
1
PATHPrimero lea sobre la variable de entorno y luego actualice la pregunta.
S.Lott

Respuestas:

135

/usr/local/binsería la ubicación más apropiada. Mac OS X lo tiene PATHpor defecto

unbeli
fuente
¡Bingo! Gracias :)
Patrick Lynch
44

Tradicionalmente, tales scripts entran ~/bin(es decir, el directorio bin en su directorio de inicio) o. /usr/local/bin/El primero significa que el script solo funcionará para usted, el segundo es para los scripts que desea que cualquier persona del sistema pueda ejecutar.

Si lo coloca ~/bin, es posible que deba agregarlo a su variable de entorno PATH. /usr/local/binya debería estar en el camino.

Bryan Oakley
fuente
30

Hay dos maneras de hacerlo -

  1. Coloque su script en usr / local / bin y asegúrese de que sea ejecutable (chmod + x my_script) (Esto ya está configurado en la ruta, puede verificarlo haciendo un echo $ PATH)
  2. Cree una carpeta en su directorio personal llamada bin. (Para sus guiones personales)
    • cd ~ (lo lleva a su directorio de inicio)
    • mkdir bin (crea una carpeta bin)
    • vim .bash_profile (para establecer la variable de entorno de ruta)
    • export PATH = ~ / bin: $ PATH (Presione i luego agregue esta línea y luego haga esc y escriba: wq)
    • Ahora puede simplemente escribir el nombre de su script y ejecutarlo desde cualquier lugar que desee.

** NOTA : Si desea ejecutar el script con un comando abreviado en lugar de escribir el nombre de archivo completo, agregue lo siguiente a su .bash_profile:
alias myscript='my_script.sh'
Luego, puede ejecutar el script simplemente escribiendo myscript. (puedes sub en el alias que quieras)

Piqué
fuente
4

En el sistema operativo mac

  • Abra el archivo bash ~ / .bashrc.
  • agregue la ruta de su script en su archivo bashrc, usando export PATH = "$ PATH: /Users/sher.mohammad/Office/practice/practiceShell"
  • Abra su archivo ~. / Bash_profile y agregue [[-s ~ / .bashrc]] && source ~ / .bashrc
  • abre una nueva ventana de terminal Ahora, cada vez que abras tu terminal, se cargará tu script
Sher Mohammad
fuente
¿Por qué no ponerlo directamente .bash_profile? Es mucho más simple (y esa cosa de fuente .bashrc nunca funcionó para mí).
szeitlin
Investigué y encontré que bash_profile se ejecuta cuando inicias sesión, bashrc se usa para shells que no son de inicio de sesión, OS X por defecto como shell de inicio de sesión y cargar bash_profile, por lo que agregar bash_profile funcionará bien, y si escribes en bashrc tienes que agregar [[- s ~ / .bashrc]] && source ~ / .bashrc en bash_profile, para cargar bashrc cuando bash_profile se ejecuta en el momento del inicio de sesión
Sher Mohammad
4

¡Este es muy fácil si está familiarizado con su archivo bashrc! Esto utilizará completamente solo su archivo .bashrc y tardará 2 segundos en realizarse.

(Yo uso Arch Linux Manjaro, así que uso .bashrc ubicado en mi directorio de inicio)

El código que se colocará en su archivo .bashrc:

# Simple bashrc method to launch anything in terminal from any directory

YOURCOMMAND () {
  cd /path/to/directory/containing/your/script/ && ./YOURSCRIPT
}

Como puede ver, primero usa el comando 'cd' simple y le da el directorio de la ubicación de los scripts, luego use '&&' para que pueda ejecutar el siguiente comando inmediatamente después, y finalmente abra su script tal como lo haría ¡normalmente! ¡Súper fácil y guardado directamente en su archivo .bash! :)

¡Espero haber ayudado a alguien!

Sinceramente,

AnónimoX

AnónimoX
fuente
esto es genial ... ¡y permite que mi zsh se autocomplete!
Milán
2

Al usar bash shell, escriba ese script como función y luego colóquelo en .bashrc o obtenga el archivo que contiene esa función por "source file_name"

Ahora ejecute el script mediante una llamada a la función en el shell.

purushothaman poovai
fuente
1

O guardarlo en /usr/bin(o en cualquier otro directorio presente PATH) o editarlo PATHpara incluir el directorio en el que lo guardó básicamente hará que se ejecute en cualquier directorio.

usted
fuente
7
/usr/binse puede vaciar y reemplazar completamente durante una actualización del sistema operativo, haciendo que su script desaparezca misteriosamente. /usr/local/bines para este propósito, como lo menciona Bryan Oakley. Consulte también el Estándar de jerarquía
Stephen P
0

desde el directorio de trabajo de 'script.sh' "mv [script.sh] / usr / local / bin" (no probado pero parece ser la forma menos compleja en mi opinión).

d1gl3r
fuente
1
Probablemente lo necesite sudo mv script.sh /usr/local/bin, ya que ese directorio no se puede escribir sin aumentar los privilegios.
Perette
-2

Debería ponerlo en el directorio ejecutable global de su máquina. Creo que normalmente sería /usr/binen sistemas operativos basados ​​en Unix (sin embargo, esto a menudo requeriría privilegios de superusuario en esa máquina).

También podría ponerlo en cualquier otro directorio que esté en la $PATHvariable de entorno, aunque solo funcionaría para aquellos usuarios que tengan ese directorio en esa variable.

Puede encontrar el valor de $PATHescribiendo echo $PATHen un shell. Los directorios están separados por : .

Frxstrem
fuente
9
Voy a votar en contra porque / usr / bin es la respuesta incorrecta. / usr / local / bin está diseñado específicamente para scripts "locales" (es decir, los que usted crea en lugar de los que vienen con el sistema).
Bryan Oakley