確認するシェルスクリプトを作成しました。それ以外の場合は、その値を環境変数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
答え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
export
PATH
(すでにエクスポートされている変数なので、サブシェルで変数を再利用してもかまいません。)
.
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.