¿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.sh
recibimos 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
-k
opció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 $x
que significa que en la próxima ejecución demy_script
, sip_out
se omite, se mantendrá en el valor pasado la última vez! ('/some/path'
)unset
después de la primera ejecución, restablecerlos antes de la próxima ejecución?x=42 echo $x
ni siquiera genera nada si$x
no 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 getopts
en el indicador de comandos de shell.fuente
i
yd
). Cuando lo ejecuto,my_script -i asd -d asd
obtengo una cadena vacía para eld
argumento. Cuando lo ejecuto,my_script -d asd -i asd
obtengo 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
zparseopts
no admite abreviar opciones largas o la--p_out=foo
sintaxis como logetopt(3)
hace GNU .fuente
[]
es 2 guiones? ¡No tiene sentido!info zsh zparseopts
para más detallesSe me ocurrió este guión.
pásalo como
my_script --p_out /some/path --arg_1 5
y luego en el script puedes usar$arg_1
y$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 last
Y 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