Есть ли способ проверить, есть ли ошибка при выполнении команды?
Пример:
test1=`sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase" $search`
valid $test1
function valid () {
if $test -eq 1; then
echo "OK"
else echo "ERROR"
fi
}
Я уже пробовал это, но, похоже, это не так за работой. Я не знаю, как это сделать.
Если вам нужно только знать, была ли команда успешной или неудачной, не утруждайте себя тестированием $?, просто проверьте команду напрямую. Например:
if some_command; then
printf 'some_command succeeded\n'
else
printf 'some_command failed\n'
fi
И присвоение вывода переменной не меняет возвращаемое значение (ну, если оно не ведет себя иначе, когда stdout не является конечно конечно).
if output=$(some_command); then
printf 'some_command succeded, the output was «%s»\n' "$output"
fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals объясняет if более подробно.
Следует отметить, что тип подхода if...then...fi и && / || относится к состоянию выхода, возвращаемому командой, которую мы хотим проверить (0 при успехе); однако некоторые команды не возвращают ненулевой статус выхода, если команда не выполнена или не может обрабатывать ввод. Это означает, что обычные подходы if и && / || не будут работать для этих конкретных команд.
Например, в Linux GNU file все еще выходит с 0, если он получил несуществующий файл в качестве аргумента и find не смогли найти указанный пользователем файл.
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
В таких случаях одним из возможных способов справиться с ситуацией является чтение stderr / stdin, например те, которые возвращаются командой file, или анализируют вывод команды, как в find. Для этих целей можно использовать оператор case.
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found
(Это ответ моего собственного ответа на соответствующий вопрос на unix.stackexchange.com)
Итак, что-то вроде:
cd /nonexistant
if [ $? -ne 0 ]
then
echo failed
else
echo success!
fi
для большинства случаев, проще использовать & amp; ; & амп; построить цепочку команд, которые должны зависеть друг от друга. Таким образом, cd /nonexistant && echo success! не будет эхом удаваться, потому что команда прерывается до & amp; & amp ;. Следствием этого является ||, где cd /nonexistant || echo fail будет эхо неудачно, потому что cd не удалось. (это становится полезным, если вы используете что-то вроде || exit, что закончит скрипт, если предыдущая команда не удалась.)
Для проверки ошибок ваших команд:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
исправление ошибок в Lean production: [ ! d4] Сделать ошибки невозможными по дизайну Сделать шаги наименьшими элементами Finish по одному Сделать это очевидным для любого
Если вам нужно только знать, была ли команда успешной или неудачной, не утруждайте себя тестированием $?, просто проверьте команду напрямую. Например:
if some_command; then
printf 'some_command succeeded\n'
else
printf 'some_command failed\n'
fi
И присвоение вывода переменной не меняет возвращаемое значение (ну, если оно не ведет себя иначе, когда stdout не является конечно конечно).
if output=$(some_command); then
printf 'some_command succeded, the output was «%s»\n' "$output"
fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals объясняет if более подробно.
Следует отметить, что тип подхода if...then...fi и && / || относится к состоянию выхода, возвращаемому командой, которую мы хотим проверить (0 при успехе); однако некоторые команды не возвращают ненулевой статус выхода, если команда не выполнена или не может обрабатывать ввод. Это означает, что обычные подходы if и && / || не будут работать для этих конкретных команд.
Например, в Linux GNU file все еще выходит с 0, если он получил несуществующий файл в качестве аргумента и find не смогли найти указанный пользователем файл.
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
В таких случаях одним из возможных способов справиться с ситуацией является чтение stderr / stdin, например те, которые возвращаются командой file, или анализируют вывод команды, как в find. Для этих целей можно использовать оператор case.
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found
(Это ответ моего собственного ответа на соответствующий вопрос на unix.stackexchange.com)
Итак, что-то вроде:
cd /nonexistant
if [ $? -ne 0 ]
then
echo failed
else
echo success!
fi
для большинства случаев, проще использовать & amp; ; & амп; построить цепочку команд, которые должны зависеть друг от друга. Таким образом, cd /nonexistant && echo success! не будет эхом удаваться, потому что команда прерывается до & amp; & amp ;. Следствием этого является ||, где cd /nonexistant || echo fail будет эхо неудачно, потому что cd не удалось. (это становится полезным, если вы используете что-то вроде || exit, что закончит скрипт, если предыдущая команда не удалась.)
Для проверки ошибок ваших команд:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
исправление ошибок в Lean production: [ ! d4] Сделать ошибки невозможными по дизайну Сделать шаги наименьшими элементами Finish по одному Сделать это очевидным для любого
Если вам нужно только знать, была ли команда успешной или неудачной, не утруждайте себя тестированием $?, просто проверьте команду напрямую. Например:
if some_command; then
printf 'some_command succeeded\n'
else
printf 'some_command failed\n'
fi
И присвоение вывода переменной не меняет возвращаемое значение (ну, если оно не ведет себя иначе, когда stdout не является конечно конечно).
if output=$(some_command); then
printf 'some_command succeded, the output was «%s»\n' "$output"
fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals объясняет if более подробно.
Следует отметить, что тип подхода if...then...fi и && / || относится к состоянию выхода, возвращаемому командой, которую мы хотим проверить (0 при успехе); однако некоторые команды не возвращают ненулевой статус выхода, если команда не выполнена или не может обрабатывать ввод. Это означает, что обычные подходы if и && / || не будут работать для этих конкретных команд.
Например, в Linux GNU file все еще выходит с 0, если он получил несуществующий файл в качестве аргумента и find не смогли найти указанный пользователем файл.
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
В таких случаях одним из возможных способов справиться с ситуацией является чтение stderr / stdin, например те, которые возвращаются командой file, или анализируют вывод команды, как в find. Для этих целей можно использовать оператор case.
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found
(Это ответ моего собственного ответа на соответствующий вопрос на unix.stackexchange.com)
Итак, что-то вроде:
cd /nonexistant
if [ $? -ne 0 ]
then
echo failed
else
echo success!
fi
для большинства случаев, проще использовать & amp; ; & амп; построить цепочку команд, которые должны зависеть друг от друга. Таким образом, cd /nonexistant && echo success! не будет эхом удаваться, потому что команда прерывается до & amp; & amp ;. Следствием этого является ||, где cd /nonexistant || echo fail будет эхо неудачно, потому что cd не удалось. (это становится полезным, если вы используете что-то вроде || exit, что закончит скрипт, если предыдущая команда не удалась.)
Итак, что-то вроде:
cd / nonexistant, если [$? -ne 0], тогда эхо не удалось еще успеху echo! fi
для большинства случаев, проще использовать & amp; & amp; построить цепочку команд, которые должны зависеть друг от друга. Таким образом, cd / nonexistant & amp; & amp; echo success!
не будет не успехом эха, потому что команда прерывается до & amp; & amp ;. Следствием этого является ||, где cd / nonexistant || echo fail
выйдет из echo, потому что cd не удался. (это становится полезным, если вы используете что-то вроде || exit, что закончит скрипт, если предыдущая команда не удалась.)
Следует отметить, что , если ... тогда ... fi
и & amp; & amp;
/ ||
с возвратом полученного результата командой, которую мы хотим проверить (0 на успех); однако некоторые команды не возвращают ненулевой статус выхода, если команда не выполнена или не может обрабатывать ввод. Это означает, что обычные подходы , если
и & amp;
/ ||
не будут работать для этих конкретных команд.
Например, в Linux GNU файл
по-прежнему выходит с 0, если он получил несуществующий файл в качестве аргумента, а find
не смог найти указанный файл.
$ find. -name "not_existing_file" $ echo $? 0 $ file ./not_existing_file ./not_existing_file: невозможно открыть файл `./not_existing_file '(Нет такого файла или каталога) $ echo $? 0
В таких случаях одним из возможных способов справиться с ситуацией является чтение сообщений stderr
/ stdin
, например. те, которые возвращаются командой file
, или выполняют синтаксический анализ команды, подобной в , находят
. Для этих целей можно использовать оператор case
.
$ file ./doesntexist | в то время как IFS = read -r output; do & gt; case "$ output" в & gt; * «Нет такого файла или каталога» *) printf «% s \n» «Это будет отображаться, если не удалось» ;; & GT; *) printf "% s \n" "Это будет отображаться, если выполнено" ;; & GT; esac & gt; done Это будет отображаться, если не удалось найти $ find. -name "doesn'texist" | если ! читать IFS = out; затем echo «Файл не найден»; fi Файл не найден
(Это ответ моего собственного ответа на вопрос, связанный с , на unix.stackexchange.com )
команда & amp; & amp; echo OK || echo Failed
Если вам нужно только знать, была ли команда успешной или неудачной, не утруждайте себя тестированием $?
, просто проверьте команду напрямую. Например ::!!5]
, если some_command; то printf 'some_command преуспел \n' else printf 'some_command failed \n' fi
И присвоение результата переменной не изменяет возвращаемое значение (ну, если оно не ведет себя иначе, если stdout, конечно, не является терминалом).
, если output = $ (some_command); затем printf 'some_command succeded, выход был «% s» \n' "$ output" fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals объясняет , если
более подробно.
Для проверки ошибок ваших команд:
выполнить [INVOKING-FUNCTION] [COMMAND]
выполнить () {error = $ ($ 2 2 & gt; 1 & dev / null), если [$? -ne 0]; затем echo «1: $ error» exit 1 fi}
Вдохновленный в Lean production:
Итак, что-то вроде:
cd / nonexistant, если [$? -ne 0], тогда эхо не удалось еще успеху echo! fi
для большинства случаев, проще использовать & amp; & amp; построить цепочку команд, которые должны зависеть друг от друга. Таким образом, cd / nonexistant & amp; & amp; echo success!
не будет не успехом эха, потому что команда прерывается до & amp; & amp ;. Следствием этого является ||, где cd / nonexistant || echo fail
выйдет из echo, потому что cd не удался. (это становится полезным, если вы используете что-то вроде || exit, что закончит скрипт, если предыдущая команда не удалась.)
Следует отметить, что , если ... тогда ... fi
и & amp; & amp;
/ ||
с возвратом полученного результата командой, которую мы хотим проверить (0 на успех); однако некоторые команды не возвращают ненулевой статус выхода, если команда не выполнена или не может обрабатывать ввод. Это означает, что обычные подходы , если
и & amp;
/ ||
не будут работать для этих конкретных команд.
Например, в Linux GNU файл
по-прежнему выходит с 0, если он получил несуществующий файл в качестве аргумента, а find
не смог найти указанный файл.
$ find. -name "not_existing_file" $ echo $? 0 $ file ./not_existing_file ./not_existing_file: невозможно открыть файл `./not_existing_file '(Нет такого файла или каталога) $ echo $? 0
В таких случаях одним из возможных способов справиться с ситуацией является чтение сообщений stderr
/ stdin
, например. те, которые возвращаются командой file
, или выполняют синтаксический анализ команды, подобной в , находят
. Для этих целей можно использовать оператор case
.
$ file ./doesntexist | в то время как IFS = read -r output; do & gt; case "$ output" в & gt; * «Нет такого файла или каталога» *) printf «% s \n» «Это будет отображаться, если не удалось» ;; & GT; *) printf "% s \n" "Это будет отображаться, если выполнено" ;; & GT; esac & gt; done Это будет отображаться, если не удалось найти $ find. -name "doesn'texist" | если ! читать IFS = out; затем echo «Файл не найден»; fi Файл не найден
(Это ответ моего собственного ответа на вопрос, связанный с , на unix.stackexchange.com )
команда & amp; & amp; echo OK || echo Failed
Если вам нужно только знать, была ли команда успешной или неудачной, не утруждайте себя тестированием $?
, просто проверьте команду напрямую. Например ::!!5]
, если some_command; то printf 'some_command преуспел \n' else printf 'some_command failed \n' fi
И присвоение результата переменной не изменяет возвращаемое значение (ну, если оно не ведет себя иначе, если stdout, конечно, не является терминалом).
, если output = $ (some_command); затем printf 'some_command succeded, выход был «% s» \n' "$ output" fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals объясняет , если
более подробно.
Для проверки ошибок ваших команд:
выполнить [INVOKING-FUNCTION] [COMMAND]
выполнить () {error = $ ($ 2 2 & gt; 1 & dev / null), если [$? -ne 0]; затем echo «1: $ error» exit 1 fi}
Вдохновленный в Lean production:
Итак, что-то вроде:
cd / nonexistant, если [$? -ne 0], тогда эхо не удалось еще успеху echo! fi
для большинства случаев, проще использовать & amp; & amp; построить цепочку команд, которые должны зависеть друг от друга. Таким образом, cd / nonexistant & amp; & amp; echo success!
не будет не успехом эха, потому что команда прерывается до & amp; & amp ;. Следствием этого является ||, где cd / nonexistant || echo fail
выйдет из echo, потому что cd не удался. (это становится полезным, если вы используете что-то вроде || exit, что закончит скрипт, если предыдущая команда не удалась.)