我有一个bash脚本: my.sh
#!/bin/bash
do_sth()
{
sleep 5
}
main()
{
do_sth >/dev/null &
echo do sth in background ...
}
if [ "$1" = "1st_way" ]; then
main
elif [ "$1" = "2nd_way" ]; then
main >/dev/null
fi
Run Code Online (Sandbox Code Playgroud)
以下命令立即返回
./my.sh 1st_way | cat
Run Code Online (Sandbox Code Playgroud)
但是,以下命令会阻塞5秒钟
./my.sh 2nd_way | cat
Run Code Online (Sandbox Code Playgroud)
我想知道为什么它会以第二种方式阻挡5秒钟.
案例0
i=0; ls > $((++i)); echo i=$i
Run Code Online (Sandbox Code Playgroud)
创建一个文件:1
并输出:
I = 0
评论:为什么我= 0?
情况1
i=0; ls $((++i)); echo i=$i
Run Code Online (Sandbox Code Playgroud)
输出:
1
I = 1
评论:结果是正确的
案例2
i=0; echo > $((++i)); echo i=$i
Run Code Online (Sandbox Code Playgroud)
创建一个文件:1
并输出:
I = 1
评论:结果是正确的
案例3
i=0; echo 1 | grep $((++i)); echo i=$i
Run Code Online (Sandbox Code Playgroud)
输出:
1
I = 0
评论:也许案例3 <=>案例0?
案例4
i=0; command ls > $((++i)); echo i=$i
Run Code Online (Sandbox Code Playgroud)
创建一个文件:1
并输出:
I = 1
评论:为什么差异与案例0?
案例5
i=0; { ls; } > $((++i)); echo i=$i
Run Code Online (Sandbox Code Playgroud)
创建一个文件:1
并输出: …