¿Cómo ejecuto los scripts de línea de comandos?


17

En Windows, puedo crear .batarchivos. Hago doble clic en él y todas las líneas se interpretan como si lo hubiera ingresado en la consola.

En OS X, ¿qué archivo o programa debo usar? Si quiero escribir un archivo con;

 echo hello world

Quiero hacer doble clic en este archivo y ejecutarlo en una consola. ¿Cómo hago esto?


¿necesita ejecutarse el archivo cuando se hace doble clic, o simplemente desea ejecutar el archivo escribiendo el nombre del archivo?
Phil M


el archivo de doble clic es más rápido :)
Rodrigo

Respuestas:


24

Las bases del terminal en OS X son las mismas que las utilizadas en Linux. Lo que está buscando específicamente se conoce comúnmente como "Shell Scripting".

El shell predeterminado cuando abre Terminal.app(ubicado en /Applications/Utilties) es el shell bash.

OS X ha tenido un controlador de shell incorporado accesible a través del Finder y otras aplicaciones a través de la .commandextensión, aunque frustrantemente no a través de la .shextensión. Sin embargo, configurar el script para que se ejecute a través del Finder es aún más complicado.

  1. Cree un script de shell simple, como su ejemplo. He creado una aplicación Hello World:
#!/bin/bash
echo "Hello World"
  1. Guarda este archivo como HelloWorld.command.

  2. Otorgue a este archivo permiso para ser ejecutado. chmod u+x HelloWorld.commandDebería hacer eso.

  3. Abra el directorio donde guardó este archivo en Finder. Luego haga doble clic en el HelloWorld.commandarchivo.

Esto abrirá una terminal y ejecutará el script, la salida en mi computadora es la siguiente:

$ /Users/jason/Applications/HelloWorld.command; salida;
Hola mundo
desconectado

[Proceso completado]

La forma alternativa de ejecutar este archivo es mientras está en la Terminal usted mismo, simplemente emita ./HelloWorld.commandsuponiendo que está en el mismo directorio que el archivo.

Hacerlo dará como resultado una salida mucho más simple:

Aplicaciones jason-mac $ ./HelloWorld.command
Hello World
Aplicaciones jason-mac $

¡Acaba de crear y ejecutar un script de shell en OS X!


Como comentario: es ridículamente frustrante que OS X no haga esto con archivos ".sh", solo archivos ".command". Sí, es posible cambiar esto, pero .command ya existe, así que esta es mi solución sugerida.
Jason Salaz el

¿Quiere hacer la pregunta de cómo inyectar .sh en la base de datos de servicios de lanzamiento o debo hacerlo?
bmike

Obviamente tuviste la idea (el pensamiento ni siquiera se me pasó por la mente), así que puedes hacerlo.
Jason Salaz el

Tengo la idea de que - aquí va, ima pedir todo por sí mismo ...
bmike

Me da:chown: u+x: Invalid argument
Rodrigo

4

El equivalente de la consola o símbolo del sistema en Windows es la aplicación Terminal ubicada en / Aplicaciones / Utilidades /

El equivalente de DOS (o como lo llamen en estos días) es "bash"

El equivalente de un archivo por lotes (.bat) en Windows es un script de shell (.sh)

Simplemente haga una búsqueda en Google de "bash" "referencia" y descubrirá el resto. También recomendaría comprar el Bash Cookbook (O'Reilly).

Específicamente, esto sería lo que escribiría en una ventana de terminal para obtener su script "hello world":

Para crear el archivo:

    echo "echo hello world" > file.sh

Para cambiar los permisos para hacer que el archivo sea ejecutable:

    chmod 755 file.sh

Para ejecutar el script:

    ./file.sh

Si desea poder hacer doble clic en el Finder, haga clic con el botón derecho (o haga clic con la tecla Control) en el archivo y seleccione Obtener información, luego, en Abrir con, seleccione la aplicación Terminal. O puede usar la extensión .command en lugar de la extensión .sh.


2

Probablemente quieras echar un vistazo a AppleScript. Este libro de Sal Soghoian es considerado por muchos como el libro de referencia en AppleScript.

Otra buena manera para que los usuarios automaticen aplicaciones Mac es usando Automator . Es posible que desee probarlo también. Espero que esto ayude.

Actualizar

Parece que estás buscando algo como las secuencias de comandos de shell de Unix. Estos dos tutoriales son decentes y parecen cubrir los conceptos básicos.


Vi esto, pero el AppleScript no es el script de terminal. Creo que puedes hacer: "Ir a la terminal y escribir el comando x". Bueno, no es el estilo .bat (y un poco más difícil)
Rodrigo

Parece que los scripts de shell de Unix es lo que estás buscando.
Christian Correa

0

Guiones de shell. No creo que Ask Different sea el lugar adecuado para discutirlo en profundidad, pero hay una guía muy detallada aquí: http://tldp.org/LDP/abs/html/index.html

Mac OS X tiene certificación UNIX a partir de 10.5 (¿verdad?), Por lo que esta sabiduría aquí también es aplicable a Linux y otros sistemas operativos similares a UNIX.

(de una manera menos compleja, el Automator de Mac OS X es bastante poderoso, al igual que el Editor AppleScript, que puede ejecutar scripts de shell y otros comandos con programas, y envolverlos en un conveniente paquete .app para Launchpad o compartir con amigos)


Desde la introducción de la guía, vinculé: "Un programa de shell, llamado script, es una herramienta fácil de usar para crear aplicaciones" pegando "llamadas de sistema, herramientas, utilidades y binarios compilados. Prácticamente todo el repertorio de Los comandos, utilidades y herramientas de UNIX están disponibles para su invocación mediante un script de shell. Si eso no fuera suficiente, los comandos de shell internos, como las pruebas y las construcciones de bucle, otorgan potencia y flexibilidad adicionales a los scripts ".
Swizzlr

Y por "lugar adecuado" Creo shell scripting es realmente mejor discutió sobre el superusuario: superuser.com/questions/tagged/shell-script
Swizzlr


-2

Para mac es el archivo .sh, también conocido como script de Shell


Pero cuando lo llames desde el buscador, querrás usarlo .command. .shes un tipo de archivo no manejado del buscador (por defecto).
Jason Salaz el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.