Инициализация Tcsh и Bash - PullRequest
       42

Инициализация Tcsh и Bash

3 голосов
/ 02 сентября 2010

Я хотел бы иметь возможность получить файл для настройки некоторых переменных среды, но сделать это так, чтобы он не зависел от используемой оболочки.

Например

%: source START.env

# START.env
if [ $SHELL == "bash" ]; then
  source START.env.bash  # sets environment variables
else
  source START.env.tcsh  # sets environment variables
fi

Однакоэтот код будет работать только для bash.Как можно сделать его совместимым как с bash, так и с tcsh?

Мне нужно получить исходный файл, потому что я хочу, чтобы переменные среды потом оставались.

Ответы [ 3 ]

2 голосов
/ 02 сентября 2010

Создайте свой переменный файл для tcsh:

setenv FOO 42
setenv BAR baz
setenv BAZ "foo bar"

В своем сценарии tcsh используйте:

source filename

В своем сценарии Bash используйте:

while read -r cmd var val
do
    if [[ $cmd == "setenv" ]]
    then
        declare -x "$var=$val"
    fi
done < filename

Itбыло бы несколько сложно создать скрипт, который работал бы как на tcsh, так и на Bash.

1 голос
/ 13 марта 2012

Итак, я решил использовать подход DSL, чтобы решить эту проблему (см. раскладушка ).

1 голос
/ 02 сентября 2010

Ты можешь делать то, что говорит Деннис. Или я думаю, что это немного более красноречиво

(в bash)

sed -i 's/setenv \([a-zA-Z0-9_]*\) /declare -x \1=/g' filename
source filename

(в сценарии tcsh)

sed -i 's/declare -x \([a-zA-Z0-9_]*\)=/setenv \1 /g' filename
source filename

(Обратите внимание, что это фактически изменит ваш исходный файл на соответствующий синтаксис при каждом запуске.)

...