bash - Ejecute script de shell(con parámetros) en la línea de comandos de Windows a través de Plink
ssh putty (2)
¿Has intentado poner el comando y el argumento entre comillas?
es decir, -m "C: / myscript.sh 5"
Necesito ejecutar un script de shell de forma remota dentro de la caja de Linux desde Windows
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
exit
fi
echo "$1"
Aquí está el comando que ejecuté desde el símbolo del sistema de Windows
cmd> plink.exe -ssh username@host -pw gbG32s4D/ -m C:/myscript.sh 5
Estoy obteniendo salida como
"Número ilegal de parámetros"
¿Hay alguna manera de pasar el parámetro de la línea de comandos al script de shell que se ejecutará en el servidor remoto?
No comprende cómo funciona el
-m
.
Es solo una forma de hacer que
plink
cargue los comandos para enviar al servidor desde un archivo local.
El archivo NO se carga y ejecuta en el servidor remoto (con argumentos).
Su contenido se lee localmente y se envía al servidor y se ejecuta allí como si lo hubiera escrito en una línea de comando (remota). No puedes darle argumentos.
Una solución alternativa es generar el archivo sobre la marcha localmente antes de ejecutar
plink
desde un archivo por lotes (por ejemplo,
run.bat
):
echo echo %1 > script.tmp
plink.exe -ssh username@host -pw gbG32s4D/ -m script.tmp
Luego ejecute el archivo por lotes con el argumento:
run.bat 5
Lo anterior hará que el script ejecute
echo 5
en el servidor.
Si el script es complejo, en lugar de ensamblarlo localmente, téngalo listo en el servidor (como sugirió @MarcelKuiper) y ejecute solo el script a través de Plink.
plink.exe -ssh username@host -pw gbG32s4D/ "./myscript.sh %1"
En este caso, cuando ejecutamos solo un comando, puede pasarlo en la línea de comando Plink, incluidos los argumentos.
No tiene que usar el
-m
con un archivo (temporal).