¿Hay alguna manera fácil de pasar (recibir) parámetros con nombre a un script de shell?
Por ejemplo,
my_script -p_out '/some/path' -arg_1 '5'
Y en el interior los my_script.shrecibimos como:
# I believe this notation does not work, but is there anything close to it?
p_out=$ARGUMENTS['p_out']
arg1=$ARGUMENTS['arg_1']
printf "The Argument p_out is %s" "$p_out"
printf "The Argument arg_1 is %s" "$arg1"
¿Es esto posible en Bash o Zsh?
bash
shell-script
zsh
arguments
Amelio Vazquez-Reina
fuente
fuente

Respuestas:
La sintaxis probablemente más cercana a eso es:
fuente
-kopción se establece en el shell de llamada , entoncesmy_script p_out='/some/path' arg_1='5'tiene el mismo efecto. (Todos los argumentos en la forma de una asignación se añaden al medio ambiente, no sólo aquellas asignaciones anterior el comando.)x=42 echo $x; echo $xque significa que en la próxima ejecución demy_script, sip_outse omite, se mantendrá en el valor pasado la última vez! ('/some/path')unsetdespués de la primera ejecución, restablecerlos antes de la próxima ejecución?x=42 echo $xni siquiera genera nada si$xno se definió antes.Si no le importa estar limitado a nombres de argumentos de una sola letra
my_script -p '/some/path' -a5, es decir , en bash puede usar el incorporadogetopts, por ejemploEntonces puedes hacer
Hay un tutorial útil de Small getopts o puede escribir
help getoptsen el indicador de comandos de shell.fuente
iyd). Cuando lo ejecuto,my_script -i asd -d asdobtengo una cadena vacía para eldargumento. Cuando lo ejecuto,my_script -d asd -i asdobtengo una cadena vacía para ambos argumentos.Robé esto de drupal.org , pero podrías hacer algo como esto:
La única advertencia es que debe usar la sintaxis
my_script --p_out=/some/path --arg_1=5.fuente
-c|--condition)Uso este script y funciona de maravilla:
Uso
Resultado de la consola:
STEPS y REPOSITORY_NAME están listos para usar en el script.
No importa en qué orden estén los argumentos.
fuente
Con
zsh, usaríaszparseopts:Pero llamarías al guión con
myscript --p_out foo.Tenga en cuenta que
zparseoptsno admite abreviar opciones largas o la--p_out=foosintaxis como logetopt(3)hace GNU .fuente
[]es 2 guiones? ¡No tiene sentido!info zsh zparseoptspara más detallesSe me ocurrió este guión.
pásalo como
my_script --p_out /some/path --arg_1 5y luego en el script puedes usar$arg_1y$p_out.fuente
v=``echo ${1} | awk '{print substr($1,3)}'`` typeset $v="$2"(Eliminar una marca de retroceso cada lado)Si una función o una aplicación tiene más de cero argumentos, siempre tiene un último argumento.
Si desea leer el indicador de opción y los pares de valores, como en:
$ ./t.sh -o output -i input -l lastY desea aceptar un número variable de pares de opción / valor,
Y no quiero un gran árbol "si ... entonces ... más ... fi",
Luego, después de verificar un recuento de argumentos que no sea cero e incluso,
Escriba un ciclo while con estas cuatro declaraciones eval como el cuerpo, seguido de una declaración de caso utilizando los dos valores determinados en cada pasada a través del ciclo.
La parte difícil de la secuencia de comandos se demuestra aquí:
fuente
acabas de inyectar parámetros de línea de comando dentro del alcance del script !!
fuente
-a 1 -b mitsos -c karamitsos