Я пытаюсь добавить опцию «многословия» в свой сценарий для пользователей.
То есть, когда пользователь добавляет -v
в качестве аргумента в мой сценарий, сценарий должен выплевывать все, что обычно делает командана stdout
.Если нет -v
, то на stdout
ничего не должно быть напечатано, кроме того, что я echo
вручную сообщаю пользователям о выполняющейся команде.
Вот моя идея и реализация -
- Иметь переменную
V
, добавляемую в конце каждой команды в скрипте, -
, как dd if=/dev/zero of=${XYZ} bs=1M count=5 ${V}
- Проверьте параметр
-v
от пользователя, если он НЕ присутствует, тогда присвойте /dev/null
V
, иначе V
будет нулевым.
Фрагмент скрипта:
V=">/dev/null"
while getopts "v" opt; do
case $opt in
v) V="" ;;
esac
done
dd if=/dev/zero of=${XYZ} bs=1M count=5 ${V}
Итак, я ожидаю, что когда для V
установлено значение /dev/null
, dd
команда не будет печатать что-либо иначе V
в любом случае является нулевым, поэтому команда напечатает обычный материал, который печатает.
Проблема:
Когда я запускаю скрипт, команда dd
(или любая другая команда в этом отношении) рассматривает ${V}
как аргумент и жалуется на непониманиеit
Creating Disk Image:dd: unrecognized operand ‘>/dev/null’
Что меня больше смущает, так это то, что когда я жёстко кодирую /dev/null
в dd
команде
dd if=/dev/zero of=${XYZ} bs=1M count=5 >/dev/null
, он работает так, как ожидалось (то есть без вывода на печать).
Было бы очень признательно, если бы кто-нибудь смог пролить свет на упомянутое поведение и предложить соответствующее.
Спасибо!