Сохранить вывод команды grive в переменную в скрипте bash
Я пытаюсь создать скрипт, который синхронизирует мой компьютер с Google Drive с помощью инструмента grive. Я хотел бы сохранить выходные данные grive
команда для переменной bash, но я не могу заставить ее работать.
Некоторое гугление научило меня, что выходные данные команды могут быть сохранены в переменные, используя следующий синтаксис:
VARABLENAME=$(command)
и результат может быть позже напечатан
echo ${VARIABLENAME}
Тем не менее, команда grive, кажется, является исключением из этого, потому что, когда я использую этот синтаксис, она все равно печатает выходные данные в терминале, а содержимое переменной пусто.
Как я могу сохранить вывод grive
в переменной правильно?
1 ответ
Проблема заключалась в том, что grive
команда выводила в поток ошибок STDERR (дескриптор файла 2), который обычно используется для передачи сообщений об ошибках, а STDOUT (дескриптор файла 1) используется для отображения фактического (при успешном завершении) вывода любой программы (строго говоря).
Я не пользовалась grive
, но, по вашим словам, разработчик мог использовать STDERR только для отображения каких-либо сообщений от команды.
Теперь подстановка команды, которую вы использовали:
VARABLENAME=$(command)
спасет выведение из command
в VARABLENAME
, не STDERR. В результате переменная была пуста, и вы видели сообщения на терминале.
Я предложил:
VARABLENAME="$(command 2>&1)"
это сохранит STDOUT и STDERR в переменную (в вашем случае просто STDERR, так как нет STDOUT), поэтому вы получите желаемый результат, используя echo "${VARIABLENAME}"
,
Кроме того, поскольку нет STDOUT, вы можете сохранить только STDERR в переменной (обобщение, верно для любой такой программы):
VARABLENAME="$(command 2>&1 >/dev/null)"