小编赵小刚*_*赵小刚的帖子

为什么我的bash脚本会阻塞?

我有一个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秒钟.

bash

7
推荐指数
1
解决办法
288
查看次数

在bash中增加一个变量`i = 0; LS> $((++ⅰ)); echo i = $ i; `为什么结果是i = 0

案例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

并输出: …

bash shell

5
推荐指数
1
解决办法
151
查看次数

标签 统计

bash ×2

shell ×1