如何更改 bash 脚本的 `echo` 输出?
How can I change a bash script's `echo` output?
我的问题是我需要更改 bash 脚本的输出,用 echo
打印,使用一个工具(如 sed
或 awk
)大多数 GNU/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 [=14=]` [start VHOST_DIR|restart|reload|stop|status]" 1>&2
exit 1
}
case "" in
*)
usage
;;
esac
如果你知道怎么做更好的,请给我一个建议!
使用信息可能会打印到标准错误,而sed
只处理标准输入(在管道的另一端,命令的标准输出)。
您可以将标准错误重定向到标准输出:
${@:2} 2>&1 | sed 's/apache50/cli webserver/g'
但这会与初衷相冲突(例如,显示错误消息和使用信息。)
我的问题是我需要更改 bash 脚本的输出,用 echo
打印,使用一个工具(如 sed
或 awk
)大多数 GNU/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 [=14=]` [start VHOST_DIR|restart|reload|stop|status]" 1>&2
exit 1
}
case "" in
*)
usage
;;
esac
如果你知道怎么做更好的,请给我一个建议!
使用信息可能会打印到标准错误,而sed
只处理标准输入(在管道的另一端,命令的标准输出)。
您可以将标准错误重定向到标准输出:
${@:2} 2>&1 | sed 's/apache50/cli webserver/g'
但这会与初衷相冲突(例如,显示错误消息和使用信息。)