Я не знаком с linode, но если вам назначена подсеть /64
IPv6, вы можете настроить свой компьютер с IPv6-адресом (es ), используя любую инфраструктуру адресации IPv6, поддерживаемую провайдером:
Вы можете использовать синтаксис подстановки команд $(..)
в условии 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
Примечание :Заголовок вопроса относительно -сформулирован с момента публикации первой версии ответа.
вы можете использовать код ниже
if [[ $? == 0 ]]
then
command 1>stdout.txt
else
echo "exit code is not successfull"
command 2> stderr.txt
fi