【问题标题】:Shell scripts run one after anotherShell脚本一个接一个地运行
【发布时间】:2020-05-19 07:28:05
【问题描述】:

我有 5 个 shell 脚本。每个都有一个java 命令。以前的作业输出被输入到下一个作业。

我创建了一个superScript.sh

//mail - to inform beginning
sh script1.sh;
sh script2.sh;
sh script3.sh;
sh script4.sh;
sh script5.sh;
//mail to inform end

示例script1.sh

cd toBaseDirectory;
java -cp /path/to/application.jar main.class parameter

但是所有的作业都是同时开始的。我怎样才能使这个顺序?

【问题讨论】:

  • 但是所有的作业都是同时启动的。这似乎是不可能的,除非java程序自己fork自己并在后台运行而前台终止。
  • 只是将 bash 脚本执行的输出作为输入发送到另一个 bash 脚本的一种方式retval=$(./abc.sh) && result=$(./pqr.sh "$retval") && echo "$result"

标签: java linux bash shell


【解决方案1】:

尝试像这样运行 javas

java -cp /path/to/application.jar main.class parameter & wait

【讨论】:

  • 它有什么不同?
【解决方案2】:

如果只想在第一个命令成功退出时运行第二个命令。为此,请使用 && 加入他们

command1 && command2

简单示例

~$ cat abc.sh 
#!/usr/bin/env bash
echo "hi"

~$ cat pqr.sh 
#!/usr/bin/env bash
echo "batman say :  $1"

如果abc.sh执行成功则只执行pqr.sh

~$ retval=$(./abc.sh) && result=$(./pqr.sh "$retval") && echo "$result"
batman say :  hi

您也可以尝试使用 shell 脚本执行 java 命令的类似方法

注意: 要按命令顺序执行 Shell 脚本,等待第一个脚本完成后再开始下一个脚本。您可以使用 ; command1; command2

【讨论】:

    【解决方案3】:

    wait 等待进程完成

    您也可以选择仅在第一个命令成功退出时才运行第二个命令。为此,请通过&& 加入他们

    cmd1 && cmd2
    

    但在这样的重复情况下,我建议在脚本正文中使用一个简单的循环:

    for n in {1..5} ; do sh script${n}.sh ; done
    

    循环不仅可以按顺序运行它们,而且在需要时更容易调整和重用,使用大括号扩展

    【讨论】:

      猜你喜欢
      • 2020-11-04
      • 1970-01-01
      • 2018-08-12
      • 2013-04-18
      • 2021-05-04
      • 2021-05-22
      • 1970-01-01
      • 2021-06-03
      • 2020-10-08
      相关资源
      最近更新 更多