Действительно ли возможно получить сообщение об ошибке от предыдущей команды, которая перестала работать когда условное использование выполнений команды ||

Похоже на использование KDE так попытка:

Control Centre -> Regional and Accessibility -> Keyboad Shortcuts

и измените сочетание клавиш в Popup Launch Menu запись от Alt-F1 к Win ключ.

6
21.12.2011, 01:31
2 ответа

Можно перенаправить вывод ошибок в файл и затем получить тот вывод:

trap "rm -f /tmp/cfn-error.txt" 0 1 2 3 15
/opt/aws/bin/cfn-init -s ... 2>/tmp/cfn-error.txt ||
    error_exit $(</tmp/cfn-error.txt)

Необходимо всегда очищать путаницу, не забывайте удалять любые временные файлы, которые Вы создаете.

7
27.01.2020, 20:27
  • 1
    любая идея, как заставить его обработать развязанные переменные set -u;echo $str ? –  Aquarius Power 25.07.2014, 05:55
  • 2
    Сделайте Вы имеете в виду дескриптор, когда оболочка вышла бы из-за -u опция? В (da) sh, существует trap 0. В ударе, существует trap ERR. –  Arcege 25.07.2014, 09:49
  • 3
    , я работал над этим ответом/вопросом, да я закончил необходимость использовать trap ERR –  Aquarius Power 25.07.2014, 10:52

Можно также сделать это перенаправлением:

# run_cmd 'error message' cmd -foo "${params[@]}"
run_cmd() {
    local e r m=$1
    shift
    exec 6>&1
    e=$("$@" 2>&1 >&6)
    r=$?
    exec 6>&-
    ((r)) || return 0
    error_exit "$m" "$e"
}

Таким образом, Вы использовали бы:

run_cmd 'Failed to run cfn-init' /opt/aws/bin/cfn-init -s ..

Строка: $ e= (" $" 2> &1> &6) сначала направляет stderr к stdout, который в контексте $ (..) вывод, который мы получаем. Затем stdout направлен туда, где он первоначально пошел, когда мы запустили функцию.

Конечно, можно заставить error_exit дополнительно взять статус выхода и назвать его с, например: "$r" "$m" error_exit "$e"

1
27.01.2020, 20:27

Теги

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