2013-02-28 54 views
0

我提供了一个脚本来处理两件事,捕获标准的out/err和返回值。我使用的进程替换:捕获来源日志脚本中的返回值

logger.sh

exec > >(
cat 
echo $? 
) 2>&1 

test.sh

. ./logger.sh 
ls abc 

因为我没有一个名为ABC的文件,我想看看这回显值1(来自echo $?)作为返回码。我正在阅读,这将不会适用于流程替换。这可以转换为命名管道吗?这会工作吗?

运行如下:

bash ./test.sh 

回答

0

试着这样做:

#!/bin/bash 

trap 'echo "DEBUG[$?]" | tee /tmp/log' ERR 

xxxx # a non existent command 

如果你已经有了一个trap,你可以这样做:

#!/bin/bash 

trap 'echo "DEBUG[$?]" | tee /tmp/log; do_something_else' ERR 0 1 2 3 15 

xxxx # a non existent command 
+0

尼斯,这确实工作。 ..我可以把它放在'logger.sh'中。如果脚本test.sh中有一个陷阱呢?我不想破坏它... – jcalfee314 2013-02-28 19:50:38

+0

为了澄清,我使用了'陷阱'....'EXIT'来捕获错误和成功。另外,在exec块关闭后陷阱进入'logger.sh'。 – jcalfee314 2013-02-28 19:55:48

+0

看到我编辑的帖子 – wam 2013-02-28 19:59:20