以排序方式运行 shell 脚本?

以排序方式运行 shell 脚本?

我有 4 个 shell 脚本,我想按顺序运行它们:

脚本1 -> 脚本2 -> 脚本3 -> 脚本4

在本地计算机中,我可以通过使脚本可执行并创建一个新的 shell 脚本来确保这一点,如下所示:

#!/bin/bash
. script1.sh
. script2.sh
. script3.sh
. script4.sh

如果其中一个脚本位于远程计算机中(例如 script2.sh),我该如何:

  1. 远程运行shell脚本
  2. 确保排序。

注意:所有脚本都有无限循环。

答案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完成后将其复制回来。

相关内容