我有 4 个 shell 脚本,我想按顺序运行它们:
脚本1 -> 脚本2 -> 脚本3 -> 脚本4
在本地计算机中,我可以通过使脚本可执行并创建一个新的 shell 脚本来确保这一点,如下所示:
#!/bin/bash
. script1.sh
. script2.sh
. script3.sh
. script4.sh
如果其中一个脚本位于远程计算机中(例如 script2.sh),我该如何:
- 远程运行shell脚本
- 确保排序。
注意:所有脚本都有无限循环。
答案1
我假设您可以使用以下命令运行脚本:( ./script1.sh
在 shell 中启动脚本)而不是. script1.sh
(这将来源它们在你当前的 shell 中)?
如果是这样:
#!/bin/bash
./script1.sh &&
{ ssh user@remote "cd /path/to/ && script2.sh" ; } &&
./script3.sh &&
./script4.sh
&&
确保仅当前面的指令返回“0”(=“ok”)时才执行以下指令(因此,请确保您的脚本在正常情况下返回正确的“0”,以及其他内容(一个小的正整数,例如“1”) “)如果不行)。
(请注意,您可以&&
在一行的末尾添加,就像我在这里所做的那样,然后在下一行添加以下内容,而无需\
在中间添加换行符。行尾的“&&”告诉 bash行可以在下一行继续[感谢@Dennis纠正我:我认为当“&&”位于下一行时不放置“\换行符”也有效,这更具可读性......但没有如果你想在下一行使用“&&”,则需要反斜杠前一个换行符])
答案2
如果您可以ssh
连接到远程计算机并且脚本已经位于远程计算机上test
您帐户的子目录中,您可以执行以下操作:
#!/bin/bash
. script1.sh
ssh your_name@remote_machine "cd test; . script2.sh"
. script3.sh
. script4.sh
该脚本将在获取之前等待远程命令返回script3.sh
如果脚本尚不存在,或者定期更改,您可以scp
首先将其复制到已知位置(假设您已经创建过test
一次):
#!/bin/bash
. script1.sh
scp script2.sh your_name@remote_machine:~/test/
ssh your_name@remote_machine "cd test; . script2.sh"
. script3.sh
. script4.sh
如果script2.sh
在文件中创建一些输出,您当然可以在ssh
完成后将其复制回来。