小编cri*_*prg的帖子

Bash:使用管道运算符时 Trap ERR 不起作用

我试图将 stdout 和 stderr 中的所有内容记录到日志文件中,并仍然保留控制台。为此,我只是将:附加|& tee -a log_file.log到每个命令中。
但是,如果脚本期间发生任何错误,我还想运行自定义命令。为此,我在脚本的开头添加了以下内容:trap "echo Non-zero exit code detected" ERR
问题是通过使用管道运算符,陷阱中的回显不再执行。

脚本 1,不带管道:

$cat test.sh
#!/bin/bash

trap "echo Non-zero exit code detected!" ERR

function fail_please()
{
    echo "Returning non-zero exit code!"
    return 1
}

fail_please 
Run Code Online (Sandbox Code Playgroud)

输出1:

$ ./test.sh 
Returning non-zero exit code!
Non-zero exit code detected!
Run Code Online (Sandbox Code Playgroud)

脚本 2,带管道:

$ cat test.sh
#!/bin/bash

trap "echo Non-zero exit code detected!" ERR

function fail_please()
{
    echo "Returning non-zero exit code!"
    return 1
}

fail_please …
Run Code Online (Sandbox Code Playgroud)

linux bash pipe tee bash-trap

6
推荐指数
1
解决办法
2645
查看次数

标签 统计

bash ×1

bash-trap ×1

linux ×1

pipe ×1

tee ×1