Howto :: динамически добавлять строку в команду - PullRequest
0 голосов
/ 24 апреля 2020


к сожалению, я борюсь с какой-то "простой идеей".
В моем скрипте Bash я проверяю переменную и, если она установлена, я распечатываю вывод для пользователя (вид подробного / показного вывода).

[ ! -z $boolVerbose ] && fnc_print2user "i" "Print to user in one-line"

Это работает довольно хорошо для меня.
Теперь у меня есть команды, которые не позволяют подавить их вывод, поэтому я хочу скрыть или показать их, если указанная выше переменная установлена ​​/ не пуста.

Я попробовал следующее (и несколько других вариантов ..), чтобы запустить команду как она есть (значит: показывать вывод), ожидать, что переменная не установлена ​​/ пуста, тогда она должна добавить «&> / dev / null» к команде раньше (поэтому подавить вывод) .

commandWithOutput $([ -z $boolVerbose ] && echo " &> /dev/null")

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

Можно ли выполнить какие-то динамические c корректировки команды, как указано выше, в одной строке или мне нужно создавать реальные операторы if-else с различными методами commandWithOutput внутри? Заранее спасибо за ваши идеи и помощь! : -)

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Я думаю, это примерно дает вам то, что вы хотели:

commandWithOutput &> /dev/$([ -z "$boolVerbose" ] && echo null || echo stdout)
1 голос
/ 24 апреля 2020

Перенаправить вывод в другой дескриптор файла. Используйте exec, чтобы перенаправить этот дескриптор на выход или в / dev / null, как вам нужно.

#!/bin/bash
for hide in 0 1 ; do
    if ((hide)) ; then
        exec 3>/dev/null
    else
        exec 3>&1
    fi
    echo $hide: something >&3
    exec 3>&-
done
...