Обычно в системах Unix вы можете подавлять вывод команды, перенаправляя STDIN и/или STDERR в файл или/dev/null. Но что, если вам нужно передать содержимое в командную строку через STDIN в сценарии bash?Как безопасно отключить вывод команды?
В приведенном ниже примере должно быть понятно, что имеется в виду. Это просто пример, но я не ищу решение этой команды в конкретной, но в такой ситуации в целом. К сожалению, существует множество ситуаций, когда вы хотите подавить вывод в скрипте, но нужно передавать контент через STDIN, когда у команды нет переключателя для отправки информации другим способом.
Моей «проблемой» является то, что я написал функцию для выполнения команд с правильной обработкой ошибок и в которых я хотел бы перенаправить весь вывод, созданный выполненными командами в файл журнала.
Пример проблемы:
[18:25:35] [V] [email protected]:~# echo 'test' |read -p 'Test Output' TMP &>/dev/null
[18:25:36] [V] [email protected]:~# echo $TMP
[18:25:36] [V] [email protected]:~#
Любые идеи о том, как решить мою проблему?
'shopt -s lastpipe' или использование прок ess, то есть 'read -p 'Test Output' TMP &>/dev/null <<(echo 'test')' – user000001
Даже 'shopt -s lastpipe && echo 'test' | read -p 'Test Output' TMP &>/dev/null' оставляет пустую '$ TMP'. К счастью, ваш пример команды даже работает с '&>/dev/null' в самом конце, поэтому это опция для этой функции. – David
Обратите внимание, что опция 'lastpipe' работает только в неинтерактивных оболочках. Если вы проверите это на своем терминале, это не сработает – user000001