echo $ PATHは、シェルスクリプトによって実行された「エクスポートパス」を反映しません。

echo $ PATHは、シェルスクリプトによって実行された「エクスポートパス」を反映しません。

確認するシェルスクリプトを作成しました。それ以外の場合は、その値を環境変数PATHに追加します。PATH

シェルスクリプト内の操作に基づいてecho $PATH正常に追加されました。ただし、コマンドラインから実行しようとすると、echo $PATH変更は反映されません。

これは私のコードです。

#!/bin/bash
postgresPath="/opt/PostgreSQL/9.2/bin"
echo "Checking PATH env.."
[[ ":$PATH:" != *"$postgresPath"* ]] && export PATH="${PATH}:$postgresPath"
echo $PATH

http://rextester.com/RBLTT17164

答え1

スクリプトは独自の環境で実行されます。これは、スクリプトが実行される親シェルの環境には影響しません。つまり、$PATHスクリプトの変更は$PATH対話型シェルでは変更されません。

小さな例:

$ echo "$PATH"
/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin

$ ( PATH="hello"; echo "$PATH" )
hello

$ echo "$PATH"
/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin

exportPATH(すでにエクスポートされている変数なので、サブシェルで変数を再利用してもかまいません。)

.source現在のシェルと同じ環境でコマンドを実行するスクリプトを使用またはインポートするか、スクリプトをシェル関数に変換することをお勧めします。

答え2

この問題を解決するためにこれを

~/.bash_aliases

以下の行はテストされ、期待どおりに機能します。

function ep () { [ -n "$1" ] && DIR=$(readlink -fq $1) || DIR=$PWD; echo -e "exporting PATH (\e[33m$DIR\e[m)"; PATH=$DIR:$PATH; } 

使用法:

bashSHELL$ ep
or
bashSHELL$ ep /path/to/dir
or
bashSHELL$ ep ../path/to/dir
etc.

関連情報