如何更改 bash 脚本的 `echo` 输出?

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

我的问题是我需要更改 bash 脚本的输出,用 echo 打印,使用一个工具(如 sedawk)大多数 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'

但这会与初衷相冲突(例如,显示错误消息和使用信息。)