2012-06-30 14 views
5

Estoy tratando de escribir un script para iniciar sesión en varios servidores remotos y ejecutar un script en cada servidor. Sin embargo, me gustaría pasar una variable a través de ssh. Algo como esto:pasando variables a través de ssh

var="/home/dir/" 

    ssh -T $mchname <<'ENDSSH'  
    $var"run_script" <input> output &  
ENDSSH 

Este intento ingenuo no funciona ($ var es simplemente nulo). ¿Cuál sería la sintaxis correcta? Gracias por adelantado.

Respuesta

4

Quite las comillas de alrededor de ENDSSH. Impiden la expansión de variables dentro del here document.

+0

Ok, esto funciona. Pero ahora el control simplemente vuelve al script principal una vez que "run_script" termina en $ mchname (aunque estoy usando '&'), que no es lo que quiero. ¿Cómo puedo arreglarlo? Perdón por las preguntas básicas. Si quieres, puedes dirigirme a algún tutorial ssh donde pueda buscar esto. Gracias. – user1477337

+0

@ user1477337: el símbolo comercial está en vigor en la máquina de destino y solo significa que el control vuelve al guion principal más rápidamente ya que no tiene que esperar a que se complete 'run_script'. Pero como no hay nada después del comando 'ssh' y su documento aquí, el script principal debe salir tan pronto como se cierre la conexión' ssh', que debería ser casi inmediata. Sin embargo, si hay alguna razón por la que lo necesita, puede probar el prefijo 'exec' al comando' ssh': 'exec ssh ...' Todo esto está relacionado con el shell y en su mayoría no es específico de 'ssh'. –

2

Prueba esto:

var="/home/dir/" 

    ssh -T $mchname VAR=$var 'bash -s'<<'ENDSSH'  
    $VAR"run_script" <input> output &  
ENDSSH 
Cuestiones relacionadas