簡體   English   中英

如何更改bash腳本的`echo`輸出?

[英]How can I change a bash script's `echo` output?

我的問題在於,我需要使用在大多數GNU / Linux發行版以及可能的情況下也可以在MacOS X上運行的工具(如sedawk )更改以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM