ENV変数を変更して同じコマンドに反映するときに新しい値が表示されないのはなぜですか? [コピー]

ENV変数を変更して同じコマンドに反映するときに新しい値が表示されないのはなぜですか? [コピー]

実行すると、代わりにPATH=abc:$PATH echo $PATH古い値が得られます。PATHabc:PATH

なぜこれですか?どうやって入手できますかabc:$PATH

PATH=/mybin:$PATH which python編集:/mybinPython実行可能ファイルがある場合はどうなりますか?

ベストアンサー1

走るとき

PATH=abc:$PATH echo $PATH

またはより一般的な場合

variable=value utility

その後、variable環境で設定しますutility(現在の環境では設定しません)。

ただし、コマンドラインを解析すると、変数の値はPATH次のように変更されます。現在の環境。

変数が拡張された環境で変数を設定する必要があります。次のように2つのステップに分けてこれを実行できます。

PATH=abc:$PATH; echo "$PATH"

これはPATH現在の環境で設定され、それからecho "$PATH"以下のように実行するか、サブシェルの変数を設定します。

PATH=abc:$PATH sh -c 'echo "$PATH"'

PATHこれにより変数がに設定されますが、sh -c現在のシェルには設定されません。

2番目の例では

PATH=/mybin:$PATH which python

ユーティリティは、whichその環境で修正した後にpython見つかったと言うことができます。現在の環境ではここは拡張されていませんが。/mybinPATHPATHwhich

とにかく、which pythonよりよく書かれています(より移植可能)command -v python(「参照」)。「which」を使わないのはなぜですか?それでは何を使うべきですか?")。


ENV「変数」と呼ぶタイトルを簡単に考えてみてください。これENVは意図したものではありませんが、shいくつかの実装(および他のいくつかのシェル)で使用される環境変数です。その値がファイル名の場合は、対話型シェルセッションを開始する前にファイルをインポートします。非対話型シェルに対して同じ方法で動作する変数がbashあります。BASH_ENV

おすすめ記事