2010-10-16 107 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 
'" 
相关问题