La réponse ici ( https://stackoverflow.com/a/2732991/4752883 ) fonctionne très bien si vous essayez d'exécuter un script sur une machine Linux distante à l'aide de plink
ou ssh
. Cela fonctionnera si le script a plusieurs lignes linux
.
** Cependant, si vous essayez d'exécuter un script de commandes situé sur une linux/windows
machine locale
et que votre machine distante l'est Windows
, et qu'il se compose de plusieurs lignes utilisant **
plink root@MachineB -m local_script.bat
ne fonctionnera pas.
Seule la première ligne du script sera exécutée. Il s'agit probablement d'une limitation de plink
.
Solution 1:
Pour exécuter un script batch multiligne (surtout s'il est relativement simple, composé de quelques lignes):
Si votre script de commandes d'origine est le suivant
cd C:\Users\ipython_user\Desktop
python filename.py
vous pouvez combiner les lignes en utilisant le séparateur "&&" comme suit dans votre
local_script.bat
fichier:
https://stackoverflow.com/a/8055390/4752883 :
cd C:\Users\ipython_user\Desktop && python filename.py
Après cette modification, vous pouvez ensuite exécuter le script comme indiqué ici par @ JasonR.Coombs: https://stackoverflow.com/a/2732991/4752883 avec:
`plink root@MachineB -m local_script.bat`
Solution 2:
Si votre script batch est relativement compliqué, il peut être préférable d'utiliser un script batch qui encapsule la commande plink ainsi que comme indiqué ici par @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