我有两个需要按顺序运行的.sh脚本,第一个要求用户输入文件名。我想将它们组合起来制作一个使用两者的.sh脚本。它通常是连续运行的:
foo.sh input1 input2
bar.sh > file.csv
它们每个大约需要一个小时才能运行。有没有办法使命令在单个.sh脚本中运行,因此输入如下所示:
newscript.sh input1 input2
输出为:
file.csv
答案 0 :(得分:0)
如果您编写了原始脚本,则可以将它们重构为一个脚本。但听起来你不想修改脚本。您可以改为创建一个包装两个脚本执行的脚本。
如果第二个脚本要求第一个脚本成功,那么在执行第二个脚本之前,只需检查第一个脚本的返回码(假设第一个脚本在错误情况下正确返回非零值):
#!/bin/bash
foo.sh $1 $2
if [ $? -eq 0 ]; then
bar.sh > file.csv
else
echo "foo.sh returned with an error. Skippping execution of bar.sh due to error."
fi
$1
和$2
是脚本的第一个和第二个参数,我们将它们重定向到foo.sh.我经常喜欢在调用foo.sh之前编写一个函数来检查和处理命令行输入,但是如果foo.sh可以在执行时快速执行错误检查,则可能不值得花时间。
$?
存储先前执行的命令的返回码,因此我们在继续bar.sh之前验证它等于0。