Игнорировать ошибку в команде setenv и продолжить дальнейшее выполнение скрипта csh - PullRequest
0 голосов
/ 22 января 2020

У меня есть файл, содержащий набор команд setenv (сгенерированный из другого скрипта).

a. csh

setenv XYZ "${ABC} ab"
setenv PQR "test"

Затем я запускаю source a.csh в терминале Linux

Но если переменная $ AB C не установлена, исходные ошибки выдаются с неопределенной переменной AB C и завершаются без запуска следующий набор команд в. csh (например, setenv PQR "test").

I wi sh, чтобы продолжить выполнение этого набора команд после setenv XYZ "${ABC} ab".

Я попытался добавить перенаправление ошибок для команды setenv, но не сработало

setenv XYZ "${ABC} ab" 2 > /dev/null

Я обнаружил, что ошибка исходной команды может быть обнаружена с помощью

source a.csh & echo $?

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

Это небольшой пример из того, как выглядит мой csh файл. Но он может содержать длинный список setenvs.

Проверка существования $ AB C, а затем запуск setenv невозможен.

1 Ответ

0 голосов
/ 28 января 2020

Ближайший обходной путь, который я нашел для этого, - генерация setenvs, как показано ниже, если значение setenv содержит переменную.

[ "$?ABC" == "0" ] && echo 'Undefined $ABC' || setenv XYZ "$ABC aa"

Не удалось избежать проверки, существует ли переменная.
Но не требует, если else блокирует и делает его одним вкладышем.

Объяснение:
$?ABC возвращает 0, если переменная $ AB C не определена ,

Если переменная определена, [ "$?ABC" == "0" ] равен false , заставляя выполнение || условие.
В таком состоянии, как A && B, B выполняется только в том случае, если истинно A (базовое c && поведение).

Если переменная AB C не определена [ "$?ABC" == "0" ] равно true и код, следующий за &&, выполняется echo 'Undefined $ABC'.

...