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

Lal*_*ith 27 java ssh shell

我在远程计算机上有一个java程序Desktop/testfolder/xyz.jar.

它还在同一文件夹上有一个配置文件.当我SSH到机器时,我做:

Desktop/testfolder/xyz.jar

这里的问题是配置文件不在路径中,因为我们在主文件夹中,所以我的程序无法读取配置.

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

"ssh user@remote java -cp Desktop/testfolder/xyz.jar Main"
Run Code Online (Sandbox Code Playgroud)

它执行第一个语句,当第二个语句运行时,它在我当前的机器而不是远程机器上运行.

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

谢谢Lalith

Rob*_*bin 42

尝试这样的事情:

ssh you@yours.com "cd /home && ls -l"
Run Code Online (Sandbox Code Playgroud)

  • 别客气!如果命令的第一部分"工作",Trey和我的答案都会做同样的事情 - 如果第一部分失败,带&&的版本不会执行命令的第二部分.例如,比较`ssh you@yours.com"cd/non-existant; ls -l"`到`ssh you@yours.com"cd/non-existant && ls -l"`.在第一种情况下,你仍然可以从`ls -l`命令获得一些输出(即使`cd`失败 - 可能是`你'用户的主目录),在后一种情况下``ls -l`命令是跳过,因为第一个*操作数*返回*false*. (5认同)

Tre*_*ner 16

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

ssh user@remote "cd Desktop/testfolder ; java -cp xyz.jar Main"
Run Code Online (Sandbox Code Playgroud)

  • 重要的是要注意这两个运算符之间的区别:**&&**和**;**.**&&**表示第二个命令将执行*if,且仅当*第一个命令执行并返回时退出状态为零(无错误)而**;**允许执行以下命令而不管它是什么退出状态. (27认同)

Dir*_*irk 6

如果您想将命令拆分为多行以提高可读性,您还可以将命令列表传递给bash命令,如下所示:

ssh user@remote.host bash -c "'
  cd Desktop/testfolder
  java -cp xyz.jar Main
'"
Run Code Online (Sandbox Code Playgroud)