La respuesta aquí ( https://stackoverflow.com/a/2732991/4752883 ) funciona muy bien si está intentando ejecutar un script en una máquina Linux remota usando plink
o ssh
. Funcionará si el script tiene varias líneas linux
.
** Sin embargo, si está intentando ejecutar un script por lotes ubicado en una linux/windows
máquina local
y su máquina remota lo está Windows
, y consta de varias líneas usando **
plink root@MachineB -m local_script.bat
no funciona
Solo se ejecutará la primera línea del script. Esto es probablemente una limitación de plink
.
Solución 1:
Para ejecutar un script por lotes multilínea (especialmente si es relativamente simple, que consta de unas pocas líneas):
Si su secuencia de comandos por lotes original es la siguiente
cd C:\Users\ipython_user\Desktop
python filename.py
puede combinar las líneas juntas usando el separador "&&" de la siguiente manera en su
local_script.bat
archivo:
https://stackoverflow.com/a/8055390/4752883 :
cd C:\Users\ipython_user\Desktop && python filename.py
Después de este cambio, puede ejecutar el script como se indica aquí por @ JasonR.Coombs: https://stackoverflow.com/a/2732991/4752883 con:
`plink root@MachineB -m local_script.bat`
Solución 2:
Si su secuencia de comandos por lotes es relativamente complicada, puede ser mejor utilizar una secuencia de comandos por lotes que encapsule el comando plink, así como sigue, como se indica aquí por @Martin https://stackoverflow.com/a/32196999/4752883 :
rem Open tunnel in the background
start plink.exe -ssh [username]@[hostname] -L 3307:127.0.0.1:3306 -i "[SSH
key]" -N
rem Wait a second to let Plink establish the tunnel
timeout /t 1
rem Run the task using the tunnel
"C:\Program Files\R\R-3.2.1\bin\x64\R.exe" CMD BATCH qidash.R
rem Kill the tunnel
taskkill /im plink.exe