【发布时间】:2014-10-20 08:06:21
【问题描述】:
假设我有以下脚本:-
test.sh
#!/bin/bash
command1 #prints 5 lines
command2 #prints 3 lines
我使用test.sh|head -n5 运行脚本
在这种情况下会发生什么?它会同时运行这两个命令吗?还是会在 command1 之后停止? 如果我用 -n1 调用它会怎样?
背景:我可能会问一个非常基本的问题,但我实际上注意到了一些有趣的事情。我的脚本(不同的)正在处理 7,000 个文件,每个文件产生 1 行输出。完全运行脚本需要 7 分钟,但是执行 head -n1 会立即给我提示,就像脚本在仅处理第一个文件后终止一样
编辑: 以下是我的脚本
for i in $(ls filepath);do
echo "$i" # issue here
python mySript "$i" > "/home/user/output/""$i"".out"
fi
done
删除上面的 echo 后,脚本可以使用 head -n1 运行整整 7 分钟,但使用 echo 它只会打印第一行然后退出。
【问题讨论】:
-
它将完整地运行命令,然后简单地将输出传递给 head。一切似乎都在正常工作,我不明白你在问什么?
-
这似乎是 bash 的行为,因为
echo是内置命令。尝试将echo更改为/bin/echo看看会发生什么。 -
@ymonad 你说得对,你能详细说明一下这种行为吗?
-
我可能错了,但据我了解,头进程在收到您指定的行数后退出。发生这种情况时,管道被破坏,因此管道另一端的进程也终止。