Java 使用shell脚本在远程计算机上执行多个命令

Java 使用shell脚本在远程计算机上执行多个命令,java,shell,ssh,Java,Shell,Ssh,我在远程机器上有一个Java程序Desktop/testfolder/xyz.jar。它在同一文件夹中有一个配置文件。当我SSH进入机器时,我会: "ssh user@remote java -cp Desktop/testfolder/xyz.jar Main" 这里的问题是配置文件不在路径中,因为我们在主文件夹中,所以我的程序无法读取配置 我想先进入该文件夹,然后从该文件夹运行程序。在shell脚本中,如果我这样做 "ssh user@remote cd Desktop/testfolde

我在远程机器上有一个Java程序
Desktop/testfolder/xyz.jar
。它在同一文件夹中有一个配置文件。当我SSH进入机器时,我会:

"ssh user@remote java -cp Desktop/testfolder/xyz.jar Main"
这里的问题是配置文件不在路径中,因为我们在主文件夹中,所以我的程序无法读取配置

我想先进入该文件夹,然后从该文件夹运行程序。在shell脚本中,如果我这样做

"ssh user@remote cd Desktop/testfolder"
"java -cp xyz.jar Main"
它执行第一条语句,当第二条语句运行时,它在我的当前机器上运行,而不是在远程机器上运行


我们可以只执行一个命令,或者有其他解决方案吗?

您可以尝试用分号分隔命令:

ssh user@remote "cd Desktop/testfolder ; java -cp xyz.jar Main"

试着这样做:

ssh you@yours.com "cd /home && ls -l"

如果为了可读性需要将命令拆分为多行,还可以将命令列表传递给
bash
命令,如下所示:

ssh user@remote.host bash -c "'
  cd Desktop/testfolder
  java -cp xyz.jar Main
'"

谢谢你的两个评论!不客气!Trey和我的回答做了同样的事情,前提是命令的第一部分“起作用”——如果第一部分失败,带有&&的版本不执行命令的第二部分。例如,比较
sshyou@yours.com“cd/不存在;ls-l”
sshyou@yours.com“cd/不存在和&ls-l”
。在第一种情况下,您仍然可以从
ls-l
命令中获得一些输出(即使
cd
失败-可能是
you
用户的home dir)在后一种情况下,
ls-l
命令被跳过,因为第一个操作数返回false表示当且仅当第一个命令执行并返回退出状态为零(无错误)时,第二个命令才会执行;允许执行以下命令,无论其退出状态如何。还值得注意的是,在带有分号的字符串中允许换行。(是的,还有派生词,没有任何额外的语法。)…更明确地说明前面的注释的相关性——使用
而不是
&&
意味着如果
cd
失败,可以在错误的目录中调用
java
解释器,而
将阻止这种情况。因此,使用
&&
更为正确。可能重复