如何将错误输出从命令重定向到函数?
例如,我有:
function logit(){
read output
echo "error occured -- $output" >> $file
}
mkdir /tmp/pop.txt | logit
但上述方法不起作用$输出";不包含任何内容。
你的意思(在评论中(还不完全清楚,但也许你正在寻找这样的东西:
logit(){
printf "error occured -- ";
cat
} >> "$file"
exec 3>&1
{
mkdir /tmp/pop.txt
chown ...
chmod ...
} 2>&1 1>&3 | logit
这将块中所有命令的stdout路由到脚本的原始stdout,同时将所有命令的错误流引导到logit
函数。与其简单地将error occurred --
转储为标头并忽略输入中的换行符,不如将logit
实现为:
logit(){ sed 's/^/ERROR: /' >> "$file"; }
甚至可能添加一个时间戳:
logit(){ perl -ne 'printf "%s: ERROR: %s", scalar gmtime, $_'; } >> "$file"