Сохраните вывод команды grive к переменной в сценарии удара

Я пытаюсь создать сценарий, который синхронизирует мой компьютер с диском Google с помощью grive инструмента. Я хотел бы сохранить вывод grive управляйте к переменной удара, но я, может казаться, не заставляю ее работать.

Некоторый поиск с помощью Google учил меня, что выводы команды могут быть сохранены к переменным с помощью следующего синтаксиса:

VARABLENAME=$(command)

и вывод может быть позже распечатан

echo ${VARIABLENAME}

Однако команда grive, кажется, исключение к этому, потому что, когда я использую этот синтаксис, он все еще распечатывает вывод в терминале, и содержание переменной пусто.

Как я могу сохранить вывод grive в переменной правильно?

4
задан 29 July 2015 в 17:36

1 ответ

Проблема состояла в том, что grive команда производила к потоку сообщений об ошибках, STDERR (Дескриптор файла 2), который обычно используется для передачи сообщений об ошибках, в то время как STDOUT (Дескриптор файла 1) используется для показа фактического (на успех) вывод любой программы (строго говоря).

я не использовал grive, но согласно Вашим словам разработчик, возможно, использовал STDERR только для показа любых сообщений от команды.

Теперь замена команды Вы использовали:

VARABLENAME=$(command)

сохранит STDOUT command к VARABLENAME, не STDERR. В результате переменная была пуста, и Вы видели сообщения на терминале.

я предложил:

VARABLENAME="$(command 2>&1)"

это сохранит и STDOUT и STDERR к переменной (в Вашем случае просто STDERR, поскольку нет никакого STDOUT), Таким образом, Вы получили бы желаемый результат с помощью echo "${VARIABLENAME}".

Также как нет никакого STDOUT, можно сохранить просто STDERR к переменной (обобщение, верное для любой такой программы):

VARABLENAME="$(command 2>&1 >/dev/null)"
8
ответ дан 1 December 2019 в 09:08

Другие вопросы по тегам:

Похожие вопросы: