如何將錯誤輸出從命令重定向到函式?
例如我有:
function logit(){
read output
echo "error occured -- $output" >> $file
}
mkdir /tmp/pop.txt | logit
但以上不起作用,變數“$output”不包含任何內容。
uj5u.com熱心網友回復:
您的意思并不完全清楚(在評論中),但也許您正在尋找類似的東西:
logit(){
printf "error occured -- ";
cat
} >> "$file"
exec 3>&1
{
mkdir /tmp/pop.txt
chown ...
chmod ...
} 2>&1 1>&3 | logit
這會將塊中所有命令的標準輸出路由到腳本的原始標準輸出,同時將所有錯誤流定向到logit函式。與其簡單地轉儲error occurred --為標題并忽略輸入中的換行符,不如將其實作logit為:
logit(){ sed 's/^/ERROR: /' >> "$file"; }
或者甚至可以添加一個時間戳:
logit(){ perl -ne 'printf "%s: ERROR: %s", scalar gmtime, $_'; } >> "$file"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/512847.html
標籤:linux重击壳
下一篇:從多個鏈接表中洗掉記錄訪問vba
