2011-12-16 10 views
12

Me gustaría expandir un poco más en la publicación "Bash - How to pass arguments to a script that is read via standard input".Bash - Cómo pasar argumentos a un script que se lee a través de la entrada estándar redirigida

Me gustaría crear una secuencia de comandos que toma la entrada estándar y la ejecuta de forma remota al pasarle argumentos.

contenidos simplificada de la secuencia de comandos que estoy edificio:

ssh server_name bash <&0 

¿Cómo se toma el siguiente método de argumentos que aceptan y aplicarlo a mi guión?

cat script.sh | bash /dev/stdin arguments 

Tal vez estoy haciendo esto incorrectamente, proporcione soluciones alternativas también.

+0

El comando -line args son insuficientes para esta aplicación? –

+0

¿Cómo proporciono argumentos de línea de comando a 'ssh server_name bash <& 0 ', para que no se interpreten como opciones de bash? – dabest1

Respuesta

14

Prueba esto:

cat script.sh | ssh some_server bash -s - <arguments> 
2

ssh no debe hacer una diferencia:

$ cat do_x 
#!/bin/sh 

arg1=$1 
arg2=$2 
all_cmdline=$* 
read arg2_from_stdin 

echo "arg1: ${arg1}" 
echo "arg2: ${arg2}" 
echo "all_cmdline: ${all_cmdline}" 
echo "arg2_from_stdin: ${arg2_from_stdin}" 

$ echo 'a b c' > some_file 
$ ./do_x 1 2 3 4 5 < some_file 
arg1: 1 
arg2: 2 
all_cmdline: 1 2 3 4 5 
arg2_from_stdin: a b c 
$ ssh some-server do_x 1 2 3 4 5 < some_file 
arg1: 1 
arg2: 2 
all_cmdline: 1 2 3 4 5 
arg2_from_stdin: a b c 
+0

Lo siento, esto no es lo que quise decir. Tomando de su ejemplo 'ssh some-server do_x 1 2 3 4 5 dabest1

+0

No entiendo. ¿Estás tratando de escribir tu propio caparazón en 'do_x'? –

+0

Estoy tratando de crear una secuencia de comandos envoltorio que se ejecuta de forma remota cualquier secuencia de comandos proporcionada. También me gustaría apoyar cualquier entrada por cable. – dabest1

0

Esta variante de ccarton 's answer también parece funcionar bien:

ssh some_server bash -s - < script.sh <arguments> 
Cuestiones relacionadas