2011-04-05 71 views
0

previous question,我發現,有可能使用遠程主機上運行本地腳本:如何在本地機器上執行遠程主機上特定(但可變)目錄下的腳本?

ssh -T remotehost < localscript.sh 

現在,我需要讓其他人來指定該腳本將在運行目錄遠程主機。

我試圖命令,如

ssh -T remotehost "cd /path/to/dir" < localscript.sh 
ssh -T remotehost:/path/to/dir < localscript.sh 

,我甚至已經嘗試添加DIR=$1; cd $DIR的腳本,並使用

ssh -T remotehost < localscript.sh "/path/to/dir/" 

唉,所有這些工作。我該如何做到這一點?

+0

你的問題屬於對superuser.com – 2011-04-05 01:17:38

回答

3
echo 'cd /path/to/dir' | cat - localscript.sh | ssh -T remotehost 

注意,如果你這樣做是對任何複雜的,它是你仔細想想你將如何在遠程系統處理錯誤是非常非常重要的。只要星星對齊,編寫能夠正常工作的代碼非常容易。更困難 - 而且通常非常必要 - 編寫的代碼將在出於任何原因而出現問題時提供有用的調試消息。

另外,你也可以看看歷史悠久的工具http://en.wikipedia.org/wiki/Expect。它通常用於在遠程機器上編寫腳本。 (是的,錯誤處理是一個長期的維護問題吧。)

+0

的感謝!這很好地工作,並感謝提示 - 我在遠程服務器上保存日誌文件,我檢查錯誤。 – 2011-04-05 03:04:39

1

兩個更多的方式來改變遠程主機目錄(可變):

echo '#!/bin/bash 
cd "$1" || exit 1 
pwd -P 
shift 
printf "%s\n" "[email protected]" | cat -n 
exit 
' > localscript.sh 

ssh localhost 'bash -s "[email protected]"' <localscript.sh '/tmp' 2 3 4 5 
ssh localhost 'source /dev/stdin "[email protected]"' <localscript.sh '/tmp' 2 3 4 5 

# make sure it's the bash shell to source & execute the commands 
#ssh -T localhost 'bash -c '\''source /dev/stdin "[email protected]"'\''' _ <localscript.sh '/tmp' 2 3 4 5 
相關問題