Как работать, оболочка tcsh управляют и выборочно игнорируют состояние?

У меня есть 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
5
задан Walter Nissen 14 June 2010 в 23:41
поделиться

4 ответа

Итак: создайте новую оболочку, используйте ';' игнорировать первый статус, и он возвращает все ясно.

$SHELL -c 'cp file/that/might/not/exist . ; echo "good"'
3
ответ дан 13 December 2019 в 22:02
поделиться

Я не знаю о 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"
4
ответ дан 13 December 2019 в 22:02
поделиться

Если вас не волнует, что он выйдет из строя, удалите -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!
1
ответ дан 13 December 2019 в 22:02
поделиться
mustsucceed || exit 1
mustbeignored || :
2
ответ дан 13 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

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