![](/img/trans.png)
[英]In a bash script, how can I tell if the script output is redirected to a file?
[英]How can I change a bash script's `echo` output?
我的問題在於,我需要使用在大多數GNU / Linux發行版以及可能的情況下也可以在MacOS X上運行的工具(如sed
或awk
)更改以bash腳本輸出的,用echo
打印的內容。
該腳本在CS50 IDE上可用,稱為apache50
,其用法輸出為:
Usage: apache50 [start VHOST_DIR|restart|reload|stop|status]
我要打印的輸出是:
Usage: cli webserver [start VHOST_DIR|restart|reload|stop|status]
要執行apache50
我將指令作為參數傳遞給函數,然后嘗試更改產生的輸出:
optional_args(){
${@:2} | sed 's/apache50/cli webserver/g'
}
case $opt in:
webserver)
optional_args $opt "apache50" $@
break;
;;
esac
## output:
## Usage: apache50 [start VHOST_DIR|restart|reload|stop|status]
我的腳本未打印所需的輸出。
這是apache50
的一部分:
usage() {
echo "Usage: `basename $0` [start VHOST_DIR|restart|reload|stop|status]" 1>&2
exit 1
}
case "$1" in
*)
usage
;;
esac
如果您知道如何做得更好,請給我一個建議!
使用情況信息可能會打印為標准錯誤,而sed
僅處理標准輸入(在管道的另一側,命令的標准輸出 )。
您可以將標准錯誤重定向到標准輸出:
${@:2} 2>&1 | sed 's/apache50/cli webserver/g'
但這會與最初的意圖相沖突(例如,顯示一條錯誤消息以及使用情況信息。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.