Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何更改bash脚本';s'echo'输出?_Linux_Bash_Shell_Cs50 - Fatal编程技术网

Linux 如何更改bash脚本';s'echo'输出?

Linux 如何更改bash脚本';s'echo'输出?,linux,bash,shell,cs50,Linux,Bash,Shell,Cs50,我的问题在于,我需要使用一个工具(如sed或awk)来更改bash脚本的输出,该工具使用echo打印,该工具适用于大多数GNU/Linux发行版,如果可能的话,也适用于MacOS X 该脚本在CS50 IDE上可用,它被调用,其使用输出为: Usage: apache50 [start VHOST_DIR|restart|reload|stop|status] 我要打印的输出是: Usage: cli webserver [start VHOST_DIR|restart|reload|stop

我的问题在于,我需要使用一个工具(如
sed
awk
)来更改bash脚本的输出,该工具使用
echo
打印,该工具适用于大多数GNU/Linux发行版,如果可能的话,也适用于MacOS X

该脚本在CS50 IDE上可用,它被调用,其使用输出为:

Usage: apache50 [start VHOST_DIR|restart|reload|stop|status]
我要打印的输出是:

Usage: cli webserver [start VHOST_DIR|restart|reload|stop|status]
要执行,我将指令作为参数传递给函数,然后尝试更改生成的输出:

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]
我的脚本没有打印想要的输出

以下是:


如果你知道如何做得更好,请给我一个建议

使用信息可能打印为标准错误,而
sed
仅处理标准输入(在管道的另一侧,是命令的标准输出)

您可以将标准错误重定向到标准输出:

${@:2} 2>&1 | sed 's/apache50/cli webserver/g'
但这与最初的意图相冲突(例如,显示错误消息和使用信息)

${@:2} 2>&1 | sed 's/apache50/cli webserver/g'