2012-05-13 6 views
46

Ejemplo:Bash: Tome el primer argumento de la línea de comandos y pasar el resto

check_prog hostname.com /bin/check_awesome -c 10 -w 13

check_remote -H $HOSTNAME -C "$ARGS" 
#To be expanded as 
check_remote -H hostname.com -C "/bin/check_awesome -c 10 -w 13" 

espero que lo anterior tiene sentido, los argumentos cambiarán a medida que va a utilizar esto por alrededor de 20 + comandos. Es un método extraño para envolver un programa, pero es para solucionarlo. Algunos problemas con algunos sistemas que estamos usando aquí (código de amor Gotta de los años 70)

Lo anterior podría escribirse en perl o python, pero bash ser el método preferido

Respuesta

59

puede utilizar shift

cambio es una orden interna del shell que opera en los parámetros posicionales. Cada vez que invocas un cambio, "desplaza" todos los parámetros posicionales uno a uno. $ 2 se convierte en $ 1, $ 3 se convierte en $ 2, $ 4 se convierte en $ 3, y así sucesivamente

+7

¡Impresionante! Funciona como un encanto 'echo $ 1 shift echo $ * ' es un ejemplo de cómo usar shift para futuras personas que lo busquen, ejecútelo como './script.sh cmd1 cmd2 cmd3 cmd4' y establecerá $ 1 para cmd1 y el resto será cmd2 cmd3 cmd4 como yo quería – user554005

+2

Y '$ #' se reduce en 1 a menos que ya sea 0. También puede dar 'shift' a un argumento numérico para desplazarse por más de un lugar. –

+7

@ user554005: Casi siempre debería usar 'echo" $ @ "' en lugar de 'echo $ *' o 'echo" $ * "' ya que la forma no citada y la forma '$ *' citada "aplanan" los argumentos que son por lo general no deseado. –

Cuestiones relacionadas