Я пытаюсь создать сценарий, который синхронизирует мой компьютер с диском Google с помощью grive инструмента. Я хотел бы сохранить вывод grive
управляйте к переменной удара, но я, может казаться, не заставляю ее работать.
Некоторый поиск с помощью Google учил меня, что выводы команды могут быть сохранены к переменным с помощью следующего синтаксиса:
VARABLENAME=$(command)
и вывод может быть позже распечатан
echo ${VARIABLENAME}
Однако команда grive, кажется, исключение к этому, потому что, когда я использую этот синтаксис, он все еще распечатывает вывод в терминале, и содержание переменной пусто.
Как я могу сохранить вывод grive
в переменной правильно?
Проблема состояла в том, что 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)"