它将运行:

它将运行:

我是 Unix/Gnu/Linux 的新手,正在尝试了解更多信息。

我有一个情况,我需要在循环内运行 2 个脚本,但这两个脚本需要按顺序运行。

例如:

TargetFile = /data/TEST.CSV

while read -r line || [ -n "$line" ];
do
   script_copy_file.sh $Parm1 $Parm2 $Parm3
   script_split_file.sh $Parm1 $Parm2   
done < "$TargetFile"

我是否需要在这两个脚本之间添加一些内容,以便 script_split_file.sh 将在 script_copy_file 完成后运行?我读了一些关于使用 && 的文章,但我来这里是为了寻求一些有关其最佳实践的建议。

还是会自然地按顺序运行?

抱歉,如果我的问题很有趣或很奇怪,我只是尝试学习和理解。非常感谢您的帮助。

谢谢。

答案1

它将运行:

script_copy_file.sh
script_split_file.sh

script_copy_file.sh
script_split_file.sh

script_copy_file.sh
script_split_file.sh

如果你想让它运行

script_copy_file.sh
script_copy_file.sh
script_copy_file.sh

script_split_file.sh
script_split_file.sh
script_split_file.sh

然后你需要两个循环。

其他

=您需要引用变量,考虑您是否使用了正确的变量,在赋值之前没有空格,并用于shellcheck检查您的脚本。

.sh在文件名末尾使用也是一个坏主意,它可能不会导致问题,也许不是今天,也许不是明天,但有一天。想象一下,当您用 python 重新实现某个脚本时,您将需要重写多少脚本。

答案2

如果您在脚本中的不同行上调用这两个脚本,则这两个脚本将依次运行,并且它们之间除了换行符之外没有任何内容,就像您在问题中所示的那样。

你只想把&&如果您想要第二个脚本,则仅有的如果第一个脚本成功结束则运行。

在调用之间使用换行符(或;),无论第一个脚本是否成功运行,第二个脚本都将运行。

在它们之间使用||将使第二个脚本仅在第一个脚本失败(返回非零退出状态)时运行。

查看您的代码,您还需要双引号您的参数扩展:

script_copy_file.sh "$Parm1" "$Parm2" "$Parm3"
script_split_file.sh "$Parm1" "$Parm2"

...并且作业周围不应有空格=

有关的:

相关内容