4

いくつかの環境変数を設定するためにファイルを調達できるようにしたいのですが、それは使用されているシェルから独立しています。

例えば

%: 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の両方と互換性を持たせることができますか?

後で環境変数を固定したいので、ファイルを入手する必要があります。

4

3 に答える 3

2

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

tcshとBashの両方で実行されるスクリプトを作成するのはやや難しいでしょう。

于 2010-09-02T16:19:03.137 に答える
1

デニスの言うことをすることができます。または、これは少し雄弁だと思います

(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

(これにより、実行するたびにソースファイルが適切な構文に実際に変更されることに注意してください。)

于 2010-09-02T17:18:07.583 に答える
1

そのため、これを解決するためにDSLアプローチを完全に採用することになりました(clamshellを参照)。

于 2012-03-13T02:26:18.880 に答える