Bash `猫<;| perl |成功
我有一个makefile,它在应该失败的地方成功,因为这样的一行Bash `猫<;| perl |成功,bash,Bash,我有一个makefile,它在应该失败的地方成功,因为这样的一行 ./preprocess.sh <PARTIAL_SOURCE | perl >FINAL_SOURCE 为什么第一个失败了而第二个成功了?第二个成功是因为perl成功了。管道的退出代码是管道中最后一个命令的退出代码。在本例中,它是perl。它接收空输入,不做任何处理,因此它应该以0退出 另一个例子是,这也是成功的: $ a | b | perl && echo ok || echo no -bas
./preprocess.sh <PARTIAL_SOURCE | perl >FINAL_SOURCE
为什么第一个失败了而第二个成功了?第二个成功是因为
perl
成功了。管道的退出代码是管道中最后一个命令的退出代码。在本例中,它是perl
。它接收空输入,不做任何处理,因此它应该以0退出
另一个例子是,这也是成功的:
$ a | b | perl && echo ok || echo no
-bash: a: command not found
-bash: b: command not found
ok
如果您不想在PARTIAL\u SOURCE
准备就绪之前执行perl
,
您需要在管道安装之前对其进行测试:
if [ ! -f "$input" ]; then
./preprocess.sh < "$input" | perl >FINAL_SOURCE
fi
明显的跟进,我怎样才能让它失败?你的要求是什么?那么您打算实现什么呢?要求编写
FINAL\u SOURCE
,当且仅当生成它的整个命令链成功时。您的要求实际上相当模糊。preprocess.sh
读取PARTIAL\u SOURCE
,只有在上一个命令成功时,才将perl
命令的输出传输到FINAL\u SOURCE
(不确定文件或变量)?
if [ ! -f "$input" ]; then
./preprocess.sh < "$input" | perl >FINAL_SOURCE
fi
while [ ! -f "$input" ]; do sleep 1; done