我的问题在于,我需要使用在大多数GNU /上都可以使用的工具(如echo
或sed
)来更改以awk
打印的bash脚本的输出。 Linux发行版,如果可能,也可以在MacOS X上发行。
该脚本在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
如果您知道如何做得更好,请给我一个建议!
答案 0 :(得分:1)
用法信息可能会打印为标准错误,而sed
仅处理标准输入(在管道的另一侧,是命令的标准 output )。
您可以将标准错误重定向到标准输出:
${@:2} 2>&1 | sed 's/apache50/cli webserver/g'
但这会与最初的意图相冲突(例如,显示一条错误消息以及使用信息。)