我有一个脚本说
gzip -cN "$1" > "$1.gz" | ls -l "$1.gz" | awk '{print $5}'
我使用参数运行它ff
,然后收到错误消息
ls: cannot access ff.gz: No such file or directory
但当我随后运行ls -l
(手动,从 shell 提示符)时,我发现它ff.gz
在那里。问题是什么?
答案1
如果你
命令1 | 命令2…然后或多或少同时运行 。如果您有一个多 CPU 系统,它们实际上可能同时运行。但无论如何,它们将并发运行,精确的调度由太复杂而无法预测的因素决定。
cmd1
cmd2
您的是 并且您的是。因此,可能在创建文件之前就开始运行。cmd1
gzip -cN "$1" > "$1.gz"
cmd2
ls -l "$1.gz"
ls
gzip
"$1.gz"
ls
不从其标准输入读取,因此将其管道化没有任何意义。您可能想要这样做
gzip -cN“$1”>“$1.gz” && ls -l “$1.gz”|awk'{打印$5}'即运行
gzip
,然后,如果成功,则运行ls -l
。