Переопределение пользовательской переменной / переменной среды через параметр командной строки - PullRequest
0 голосов
/ 02 мая 2020

Поиск путей переопределения переменной оболочки c из командной строки. В приведенном ниже сценарии (test. csh) значение FOO по умолчанию будет равно 0. Я должен «опционально» иметь возможность переопределить значение FOO из командной строки.

#!/bin/csh

setenv FOO 0
if (${FOO}) then
    echo "Hello"
else
    echo "World"
endif

Просмотр справочных страниц csh / t csh показывает, что существует переменная -D [= значение] . Поэтому я попробовал приведенное ниже в командной строке и подумал, что это выведет «Hello». Вместо этого он напечатал «World» - это означает, что -DFOO = 1 НЕ вступает в силу.

unix-prompt> ./test.csh -DFOO=1

Я НЕ хочу использовать #argv, а затем проанализировать аргументы и установить переменную окружения соответствующим образом на основе аргументов. Мне НЕТ принуждения использовать setenv.

Ожидается переопределение значения по умолчанию, которое используется в c -shell, с помощью переопределения командной строки.

1 Ответ

2 голосов
/ 02 мая 2020

Параметр -D задокументирован в tcsh(1) как:

   -Dname[=value]
       Sets the environment variable name to value. (Domain/OS only) (+)

Я предполагаю, что вы не используете домен / ОС: -)

Вы можете используйте env для задания переменной для одной команды, например:

$ env FOO=1 ./a.csh

Обратите внимание, что в вашем скрипте вы всегда переопределяете FOO на 0; поэтому вам нужно изменить это, чтобы переопределить его, только когда он не установлен:

if (! $?FOO) setenv FOO 0

В качестве постскриптума я должен отметить, что использование сценариев в csh, как правило, не рекомендуется, если этого можно избежать; Есть много предостережений и недостатков (см., например, this ), и вам почти всегда лучше использовать оболочку Bourne.

...