Как запустить команду оболочки tcsh и выборочно игнорировать статус? - PullRequest
5 голосов
/ 15 июня 2010

У меня есть сценарий оболочки 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

Ответы [ 4 ]

4 голосов
/ 15 июня 2010

Я не знаю про 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"
3 голосов
/ 15 июня 2010

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

$SHELL -c 'cp file/that/might/not/exist . ; echo "good"'
2 голосов
/ 15 июня 2010
mustsucceed || exit 1
mustbeignored || :
1 голос
/ 15 июня 2010

Если вам все равно, если это не удастся, удалите -e из своего шебанга.Ответ @ Адама должен был дать вам подсказку, если вы просматривали документацию 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!
...