2010-10-16 188 views
24

我在遠程機器上安裝了一個java程序Desktop/testfolder/xyz.jar。使用shell腳本的遠程機器上的多個命令

它在同一個文件夾上也有一個配置文件。當我SSH到機器,我做的:

"ssh [email protected] java -cp Desktop/testfolder/xyz.jar Main"

這裏的問題是配置文件不在路徑,因爲我們是在主文件夾,所以我的程序不能電文讀出的配置。

所以我想先進入該文件夾,然後從該文件夾運行程序。 在一個shell腳本,如果我這樣做

"ssh [email protected] cd Desktop/testfolder" 
"java -cp xyz.jar Main" 

它執行的第一個語句和運行第二個語句當它運行我目前的機器不能在遠程機器上。

我們可以只做一個命令,或者有其他解決方案嗎?

謝謝 Lalith

回答

38

嘗試是這樣的:

ssh [email protected] "cd /home && ls -l" 
+0

感謝您的評論幫助! – Lalith 2010-10-16 19:06:25

+5

不客氣! Trey和我的答案在命令的第一部分「工作」時做了同樣的事情 - 如果第一部分失敗,帶有&&的版本不執行命令的第二部分。例如,比較'ssh [email protected]「cd/non-existant; ls -l」'到'ssh [email protected]「cd/non-existant && ls -l」'。在第一種情況下,你仍然可以從'ls -l'命令得到一些輸出(即使'cd'失敗 - 可能是你的用戶的主目錄),在後一種情況下,'ls -l'命令是由於第一個*操作數*返回* false *而被忽略。 – Robin 2010-10-16 21:03:48

+0

感謝'&&'提示。很有用 – 2011-01-06 12:27:48

15

你可以嘗試用分號分隔的命令:

ssh [email protected] "cd Desktop/testfolder ; java -cp xyz.jar Main" 
+25

重要的是要注意這兩個操作符之間的區別:** && **和**; **。 ** && **表示第二個命令將執行*,並且僅當第一個命令執行時返回的狀態爲零(無錯誤),而**; **允許執行以下命令,而不管它是退出狀態。 – earthmeLon 2012-06-23 05:36:50

+0

還值得一提的是,在有分號的字符串中允許換行。 (是的,[常規字符串可以在'sh'](http://stackoverflow.com/a/9140181/874188)和派生類中跨越多行,而沒有任何額外的語法。) – tripleee 2015-12-18 16:11:24

3

如果你想通過分割你的命令爲了便於閱讀,可以將多條命令傳遞給bash命令:

ssh [email protected] bash -c "' 
    cd Desktop/testfolder 
    java -cp xyz.jar Main 
'" 
相關問題