Хранить задержанный вывод оболочки в переменную?

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

my_var = $ (команда)

Однако некоторые из результатов не сохраняются в переменной, я предполагаю, потому что она задерживается … Я уверен, что ее задерживают, потому что она выводит строку, которую я хочу на экран после того, как она сохранила вывод в переменной, и я попробовал обрабатывая его …

[EDIT] ВАЖНО! Оказывается, выход шел на stderr [/ EDIT]

Как заставить его ждать завершения кода выхода (когда он выполняется на 100%), прежде чем хранить вывод в переменной?

Я не опубликовал пример, потому что думал, что пользователи будут жаловаться, что это нечестно, но это не так, и я запускаю скрипт на своих собственных серверах. Пример по запросу:

# Grab the output, so we can check for error... If error then retry same password after wait time outpt="$(hydra -l $hydra_user -P $tmp_passwds $hydra_all_params $hydra_host $hydra_module)" # Grep for "ssh protocol error" line banln=$(echo "$outpt" | grep 'ssh protocol error') # Show ban status, update wait_time if [ "$banln" != "" ];then echo "[STATUS] Oops, we got banned! (increasing wait_time + 1 second)" wait_time=$wait_time+1 # Start retry procedure until not banned fi 

Проблема в этом примере заключается в том, что строка, которую я ищу (ошибка протокола ssh ERROR), кажется, возникает после того, как вывод команды сохраняется в переменной

One Solution collect form web for “Хранить задержанный вывод оболочки в переменную?”

Если этот процесс не опирается сам по себе или не разветвляется, это не связано с задержкой. Вы можете проверить это с помощью быстрого теста:

 # FOO=$(sleep 10; echo whee;); echo $FOO whee 

Эта команда не завершается до тех пор, пока завершение sleep не завершится, и сообщение, которое будет отправлено на стандарт после этого, будет успешно сохранено в переменной. Из этого можно предположить несколько вещей:

  • Переменная не сохраняется до завершения команды.
  • STDOUT остается подключенным на весь период действия команды.

На данный момент здесь происходит одна из двух вещей:

  • Сообщение не записывается в STDOUT: вместо этого он, вероятно, записывается в STDERR.
  • Команда фактически завершается. (с учетом, разветвленный подпроцесс и т. д.)

Обычно проблема первая.

  • Простой скрипт Bash; Только работает?
  • Как создать папку с именем пользователя и датой в качестве имени папки?
  • сравнение двух файлов по строкам
  • В чем смысл ## * в сценарии оболочки?
  • Используйте minisat, чтобы найти все решения для SAT
  • Звезда печатается для пустого каталога после запуска скрипта для отображения подпапки
  • значение этой строки в службе, созданной с использованием sysintv
  • Я хочу отслеживать файлы, которые обрабатываются в последний час
  • Я хочу создать zip-файл с сохранением оригинала
  • Как автоматизировать повторяющийся процесс с использованием сценариев оболочки
  • Что делает делать в sh?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.