将错误输出重定向到bash中的函数



如何将错误输出从命令重定向到函数?

例如,我有:

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"

相关内容

  • 没有找到相关文章

最新更新