sintaxis script programacion pasar parametros lista ejemplos completa comandos comando basicos linux macos alias bash

linux - programacion - pasar parametros shell script



¿Cómo puedo definir un alias de bash como una secuencia de múltiples comandos? (8)

A través de varios comandos en un solo alias, puede usar uno de los operadores lógicos para combinarlos. Aquí hay uno para cambiar a un directorio y hacer un ls en él.

alias x="cd /tmp && ls -al"

Otra opción es usar una función de shell. Estos son los comandos sh / zsh / bash. No sé lo suficiente de otras conchas para estar seguro de si funcionan.

En cuanto a la cosa del sudo, si quieres eso (aunque no creo que sea una buena idea), lo correcto es modificar el /etc/sudoers para obtener lo que deseas.

Sé cómo configurar alias en bash, pero ¿hay alguna forma de configurar un alias para una secuencia de comandos?

Es decir, quiero que un comando cambie a un directorio en particular, luego ejecute otro comando.

Además, ¿hay alguna forma de configurar un comando que ejecute "sudo mycommand" y luego ingrese la contraseña? En los días de MS-DOS estaría buscando un archivo .bat pero no estoy seguro del equivalente de linux (o en este caso Mac OSX).


Es probable que sea más fácil definir funciones para este tipo de cosas que los alias, mantiene las cosas más legibles si desea hacer más que un comando o dos:

En tu .bashrc

perform_my_command() { pushd /some_dir my_command "$@" popd }

Luego, en la línea de comandos, simplemente puede hacer:

perform_my_command my_parameter my_other_parameter "my quoted parameter"

Podría hacer lo que quiera en una función, llamar a otras funciones, etc.

Es posible que desee echar un vistazo a la Guía avanzada de scripts de Bash para un conocimiento más profundo.


Mencionas archivos BAT, así que quizás lo que quieres es escribir un script de shell. Si es así, simplemente ingrese los comandos que desea línea por línea en un archivo así:

command1 command2

y pedirle a bash que ejecute el archivo:

bash myscript.sh

Si desea poder invocar el script directamente sin escribir "bash", agregue la siguiente línea como la primera línea del archivo:

#! /bin/bash command1 command2

Luego marca el archivo como ejecutable:

chmod 755 myscript.sh

Ahora puedes ejecutarlo como cualquier otro ejecutable:

./myscript.sh

Tenga en cuenta que a Unix no le importan las extensiones de archivo. Puede simplemente nombrar el archivo "myscript" sin la extensión ".sh" si lo desea. Es esa primera línea especial lo que es importante. Por ejemplo, si desea escribir su script en el lenguaje de programación Perl en lugar de bash, la primera línea sería:

#! /usr/bin/perl

Esa primera línea le dice a su shell qué intérprete debe invocar para ejecutar su script.

Además, si ahora copia su script en uno de los directorios enumerados en la variable de entorno $ PATH, puede llamarlo desde cualquier lugar simplemente escribiendo su nombre de archivo:

myscript.sh

Incluso la tabulación completa funciona. Es por eso que generalmente incluyo un directorio ~ / bin en mi $ PATH para que pueda instalar fácilmente scripts personales. Y lo mejor de todo, una vez que tenga un montón de scripts personales a los que está acostumbrado, puede transportarlos fácilmente a cualquier máquina Unix nueva copiando su directorio personal ~ / bin.


Para el alias puedes usar esto:

alias sequence=''command1 -args; command2 -args;''

o si el segundo comando debe ejecutarse solo si el primero tiene éxito, use:

alias sequence=''command1 -args && command2 -args''


Para encadenar una secuencia de comandos, intente esto:

alias x=''command1;command2;command3;''

O puedes hacer esto:

alias x=''command1 && command2 && command3''

El && hace que solo ejecute comandos subsiguientes si el retorno anterior es exitoso.

También para ingresar contraseñas de manera interactiva, o para interactuar con otros programas como ese, echa un vistazo a esperar. ( http://expect.nist.gov/ )


Puede incrustar la declaración de función seguida por la función en el alias mismo, de esta manera:

alias my_alias=''f() { do_stuff_with "$@" (arguments)" ...; }; f''

El beneficio de este enfoque con solo declarar la función por sí mismo es que puede tener la tranquilidad de que su función no será anulada por algún otro script que esté obteniendo (o utilizando), que podría usar su propio ayudante. bajo el mismo nombre

Por ejemplo, supongamos que tiene un script init-my-workspace.sh que está llamando . init-my-workspace.sh . init-my-workspace.sh o source init-my-workspace.sh cuyo propósito es establecer o exportar un grupo de variables de entorno (por ejemplo, JAVA_HOME, PYTHON_PATH, etc.). Si también tiene una función my_alias dentro, entonces no tendrá suerte ya que la última declaración de función dentro de la misma instancia de shell gana.

A la inversa, los alias tienen un espacio de nombres separado e incluso en caso de conflicto de nombres, se buscan primero. Por lo tanto, para la personalización relevante para el uso interactivo, solo debe usar alias.

Finalmente, tenga en cuenta que la práctica de colocar todos los alias en el mismo lugar (por ejemplo, ~/.bash_aliases ) le permite detectar fácilmente cualquier conflicto de nombres.


Su mejor apuesta es probablemente una función de shell en lugar de un alias si la lógica se vuelve más compleja o si necesita agregar parámetros (aunque bash admite parámetros de alias).

Esta función se puede definir en su .profile o .bashrc. La subshell es para evitar cambiar su directorio de trabajo.

function myfunc { ( cd /tmp; command ) }

entonces desde su línea de comandos

$ myfunc

Para su segunda pregunta, solo puede agregar su comando a / etc / sudoers (si está completamente seguro de lo que está haciendo)

myuser ALL = NOPASSWD: / /bin/mycommand


también puede escribir una función de shell; Ejemplo de combo "cd" y "ls" here