Как я могу изменить вывод `echo` скрипта bash? - PullRequest
0 голосов
/ 06 февраля 2019

Моя проблема состоит в том, что мне нужно изменить вывод bash-скрипта, напечатанный с помощью echo, используя инструмент (например, sed или awk), который работает в большинстве дистрибутивов GNU / Linux, и, если онвозможно и в MacOS X.

Сценарий доступен в IDE CS50, он называется 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

Если вы знаете, каксделайте это лучше, пожалуйста, сделайте мне предложение!

1 Ответ

0 голосов
/ 06 февраля 2019

Информация об использовании может быть напечатана со стандартной ошибкой, в то время как sed обрабатывает только стандартный ввод (на другой стороне канала стандартный вывод команды ).

Вы можетеперенаправить стандартную ошибку на стандартный вывод:

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

Но это может противоречить первоначальному намерению (например, отображение сообщения об ошибке вместе с информацией об использовании).

...