У меня есть tcsh сценарий оболочки, который я хотел бы остановить с ошибкой на ненулевом состоянии большую часть времени, но в некоторых случаях я хочу проигнорировать его. Например:
#!/bin/tcsh -vxef
cp file/that/might/not/exist . #Want to ignore this status
cp file/that/might/not/exist . ; echo "this doesn't work"
cp file/that/must/exist . #Want to stop if this status is nonzero
Итак: создайте новую оболочку, используйте ';' игнорировать первый статус, и он возвращает все ясно.
$SHELL -c 'cp file/that/might/not/exist . ; echo "good"'
Я не знаю о tcsh, но с bash вы можете использовать set -e
для этого. Если установлен флаг -e
, bash немедленно завершит работу в случае сбоя какой-либо подкоманды (технические подробности см. В руководстве). Если не установлен, он продолжит выполнение. Итак, вы можете сделать что-то вроде этого:
set +e
cp file/that/might/not/exist . # Script will keep going, despite error
set -e
cp file/that/might/not/exist . # Script will exit here
echo "This line is not reached"
Если вас не волнует, что он выйдет из строя, удалите -e
из вашего шебанга. Ответ @ Adam должен был дать вам подсказку, если бы вы просмотрели документацию tcsh .
Кроме того, вы можете выбросить сообщение об ошибке:
cp dont_care . >& /dev/null
cp still_dont_care . >& /dev/null || echo "not there"
cp must_be_there . >& /dev/null || exit 1 # oh noes!