web-dev-qa-db-ja.com

「init」ファイルにパスを一時的に設定する

「init」ファイルがあります。

#!/bin/sh

export PATH=$PATH:/home/me/morph_numsys/software/bin

これにより、このbashセッションのみのそのフォルダーへのパスを設定したいと思います。ただし、スクリプトsh initを実行しても、パスが認識されません。ただし、export PATH=$PATH:/home/me/morph_numsys/software/binとだけ言うと、問題なく動作します。どうすればこれを行うことができますか?

私はubuntuとxtermを使用しています。

2
Dervin Thunk

「このbashセッションのみ」と言うときは、スクリプトを呼び出しているbashセッションを意味していると思います。

スクリプトを実行すると、新しいシェル環境が取得されます。したがって、変数をエクスポートするときは、親環境ではなく、新しいシェル環境に変数をエクスポートします。私の知る限り、親環境にアクセスする方法はありません。ただし、bashを使用しているため、いくつかの解決策がある可能性があります。

sourceを使用します

次のようにスクリプトを実行するのではなく:/path/to/init.sh 行う source /path/to/init.sh

bashのmanページ から:

ソースファイル名[引数]

現在のシェル環境でfilenameからコマンドを読み取って実行し、filenameから最後に実行されたコマンドの終了ステータスを返します。

スクリプトをシェル関数にして.bashrcに入れます

別のオプションは、initを関数にして、次のように.bashrcに配置することです。

function init {
    export PATH=$PATH:/home/me/morph_numsys/software/bin
}

次に、ターミナルからinitを実行できます。

8
Steven D