¿Cómo ejecuto un archivo .sh o .command en Terminal?

87

Siempre quise poder ejecutar un script que descargué en línea directamente desde el Finder, pero simplemente hacer doble clic en el archivo no funciona.

Maximus
fuente

Respuestas:

103

Abra la Terminal, escriba sh /path/to/filey presione Intro.

Más rápido es escribir shy un espacio y luego arrastrar el archivo a la ventana y soltar el icono en cualquier lugar de la ventana.

Maximus
fuente
3
¿Qué crees que sucederá si el script de shell está escrito en la sintaxis de otro shell, como tcsh, zsh o ksh? El sufijo shdenota un script de shell que no "ejecuta el script en este shell".
fd0
3
@ fd0 La línea shebang se encargará de eso.
user14492
44
@ user14492- Cuando invocas un script de shell ya shell shell_scriptque se ignora la línea shebang. El shell lee la primera línea como un comentario.
fd0
@ fd0, no entiendo. ¿En qué se sh /path/to/filediferencia semánticamente de la alternativa /path/to/file.sh?
Pacerier
2
@ Pacerier: en la primera forma, el usuario que invoca debe poder leer el archivo y elige qué intérprete leerá el archivo. En la segunda forma, los permisos del archivo deben leerse y ejecutarse para el usuario que invoca y el intérprete está determinado por el hash bang en la primera línea del script. En ambos casos, el núcleo no interpreta el sufijo en el archivo.
fd0
12

Alternativamente, también podrías hacer

cd /directory/with/executable
chmod +x executable     # only required if your file is not already executable
./executable

que también ejecutará el archivo ejecutable con su shell especificado (si se especifica en el shebang #!/bin/(shell)

quizás pueda
fuente
1
En la pregunta dice "ejecutar un script que descargué en línea". Los archivos descargados de Internet generalmente tienen permisos establecidos en 644.
nohillside
@patrix, creo que no es solo Internet, sino todos los archivos que se copian de otro sistema de archivos en el suyo debido a la máscara predeterminada en su cuenta.
rwenz3l
9
chmod u+x myfile.sh
cp myfile.sh /usr/local/bin

edite ~/.bash_profiley agregue la siguiente línea:

alias myfile=./myfile.sh

ejecute la siguiente línea de comando:

source ~/.bash_profile

entonces podrá ejecutar su archivo como un programa

$ myfile

Reza Farshi
fuente
en Ubuntu, cualquier script en su ruta puede ejecutarse siempre que lo tenga #~/bin/sh, mientras que en OSXel script debe tener una .shextensión y una aliaspara cada uno de ellos. : -O
Fabrizio Bertoglio
6

Siga estos pasos para ejecutar los archivos de script:

  1. Haga clic derecho en el archivo .sh.

  2. Pase el ratón sobre Abrir con .

  3. Elija Otro ... .

  4. Deberías estar en la carpeta Aplicaciones . Abra la carpeta Utilidades y seleccione Terminal.app.

  5. Si no puede seleccionar Terminal.app, cambie las aplicaciones habilitadas de Aplicaciones recomendadas a Todas las aplicaciones . Está en la parte inferior de la ventana.

  6. Si desea abrir cada .sharchivo con Terminal.app, marque Siempre abrir con .

  7. Presione el botón Abrir en la esquina inferior derecha de la ventana.

stwykd
fuente
3

La razón por la que no funciona después de la descarga es que los permisos de archivo no lo permiten. Para habilitar los permisos de ejecución, abra Terminal y escriba chmod 755 /path/to/script. En lugar de escribir la ruta completa, puede arrastrar el script a la ventana Terminal desde Finder. Luego, para ejecutar, simplemente ingrese /path/to/script. Nuevamente, puede arrastrar y soltar el archivo en la ventana Terminal. Esta sintaxis debe ejecutar el script utilizando el shell correcto como se define en la primera línea del script.

Elliott
fuente
Mi archivo .sh se abre en el editor de texto con el que creé el archivo. ¿Cómo puedo abrirlo en la Terminal? He establecido los permisos correctos.
Bart
@bart necesita agregar la extensión .command para ejecutar un script dentro del buscador directamente.
rwenz3l