В случае успеха перенаправить стандартный вывод на команду-A, иначе стандартный вывод на команду-b. Избегая использования временных файлов

Я не знаком с linode, но если вам назначена подсеть /64IPv6, вы можете настроить свой компьютер с IPv6-адресом (es ), используя любую инфраструктуру адресации IPv6, поддерживаемую провайдером:

  • Статически настройте IPv6 в соответствии с инструкциями вашего провайдера
  • Разрешить вашей машине автоматически настраивать адреса SLAAC в ответ на рекламу маршрутизатора вашего провайдера
  • Разрешить вашей машине автоматически настраивать адреса через DHCPv6 с DHCP-сервера вашего провайдера
2
27.11.2019, 09:37
2 ответа

Вы можете использовать синтаксис подстановки команд $(..)в условии ifи посмотреть, была ли команда выполнена успешно или нет, и по-прежнему сохранять результат команды stdoutи stderrв переменной

if ! var=$(cmd 2>&1); then
    printf 'process stderr contents from $var'
fi

Вы можете увидеть, как это работает, если я имитирую cmdзапуск простого скрипта, который делает это

# cat temp.sh    
echo foo >&2
exit 1

и если я запускаю скрипт как

if ! var=$(bash tmp.sh 2>&1); then
    printf '%s\n' 'process stderr contents from $var'
    printf '%s\n' "$var"
fi

Таким же образом вы можете заставить его работать для захвата stdout, если подстановка команды прошла успешно, что произойдет в предложении elseв приведенном выше примере. В любом случае, манипулируя содержимым "$var"(, убедитесь, что кавычки находятся на ), что гарантирует, что вы обрабатываете результат, как если бы он был сохранен в файле.

Вы можете продолжить и указать синтаксис замены команды -на , а не , чтобы оболочка выполняла разбиение результатов на слова -. Например. Делая это, как показано ниже. Это может быть не нужно для простых случаев, подобных тому, который я показал здесь, но для случаев, когда результаты содержат некоторые специальные метасимволы оболочки

.
if ! var="$(bash tmp.sh 2>&1)"; then

Примечание :Заголовок вопроса относительно -сформулирован с момента публикации первой версии ответа.

1
27.01.2020, 22:24

вы можете использовать код ниже

if [[ $? == 0 ]]
then
command 1>stdout.txt
else
echo "exit code is not successfull"
command 2> stderr.txt
fi
-1
27.01.2020, 22:24

Теги

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