Не использовать sed
, чтобы управлять XML, используйте вместо этого инструмент, поддерживающий XML, например xmlstarlet
:
xmlstarlet ed -u '/user/@dn' -v 'String1, String2' input.xml
В зависимости от того, почему вы пытаетесь просто получить код выхода, вы также можете просто запустить if some-command; then echo "Success $?"; else echo "Failure $?"; fi
, который ничего не делает с выводом команды, он просто оценивает код выхода команды run. Вы можете добавитьor
(or
$(around the command and you'll still get the same results. A better example might be
if grep -q 'somestring' somefile; затем эхо "Найден какой-то код выхода $?"; else "Не удалось найти строку с кодом выхода $?"; фи `.
Вы также можете протестировать код возврата функции, который может быть явным return 3
или подразумеваемым кодом возврата, который является результатом последней команды, в этом случае вам нужно быть осторожным, чтобы у вас не было echo
в конце функции, иначе он маскирует/сбрасывает предыдущий код выхода.
command_last () {
echo "True is `true`"
echo "False is `false`"
false
}
command_last; echo $?
# Outputs:
# True is 0
# False is 1
# 1
echo_last () {
echo "True is `true`"
echo "False is `false`"
false
# echo'ing literally anything (or nothing) returns true aka exit 0
echo
}
echo_last; echo $?
# Outputs:
# True is 0
# False is 1
# # Blank line due to empty echo
# 0
Наконец, грязный трюк, поскольку вы не можете выполнить VAR=(SOME_COMMAND)
, потому что VAR=()
является определением массива, поэтому вам нужно VAR=( $(echo 'Some value') )
.
Это не дает точного ответа на этот вопрос, но я думаю, что в большинстве случаев вы будете принимать решения на основе полученного кода выхода позже в потоке выполнения. Если вам нужно проверить только код выхода успеха/неудачи — это легко сделать без сохранения кода в переменной:
if (exit 1); then
echo "Command succeeded, alles gut"
else
echo "Oi oi, Huston, we got alles kaputt 'round here"
fi
Ответ @mikeserv великолепен и дает объяснение поведения, которое я обнаружил, но понятия не имел, почему это происходит.
Я просто хотел добавить простой способ избежать local
употребления кода выхода подоболочки:
val_check_exit() {
local val=
val=$(echo "hi"; exit 1)
local res=$?
echo "val is ${val}, exit code ${res}"
}
val_check_exit
# outputs:
# val is hi, exit code 1