2015年11月3日火曜日

[cygwin] cygwinのシェル起動時にPATHの先頭に/usr/binと/usr/local/binが勝手に追加されないようにする

cygwinのデフォルトの設定では、シェル起動時に以下の2つのディレクトリが自動的にPATHの先頭に追加されます。
  • /usr/local/bin
  • /usr/bin

cygwinでインストールされているコマンドと同名の別コマンドを優先して起動したい場合には、この設定が邪魔になります。
これを無効にするには以下の方法があります。お好みでどちらかを選択してください。
  1. /etc/profileもしくは/etc/csh.loginの該当処理をコメントアウトする(bash / tcsh)
    • cygwinがPATHを上書きしているのは、/etc/profile(bashの場合)と/etc/csh.login(tcshの場合)です。これらのスクリプトを編集することで、/usr/binと/usr/local/binが勝手に追加されないようにできます。
  2. ORIGINAL_PATHでPATHを上書きする(bashのみ)
    • シェルにbashを利用している場合は、cygwinがPATHを上書き設定する際、環境変数ORIGINAL_PATHにオリジナルの変数を保存してくれています。これを利用してPATHに上書きすれば、/usr/binと/usr/local/binを含まない設定にすることができます。

具体的な修正内容:

  1. /etc/profileもしくは/etc/csh.loginの該当処理をコメントアウトする
    • tcshの場合は/etc/csh.loginの7行目をコメントアウトする
    • #set path=( /usr/local/bin /usr/bin /bin $path:q )    # <= ここ
      
      
    • bashの場合は/etc/profileの37行目をコメントアウトする
    •   : ${ORIGINAL_PATH=${PATH}}
        if [ ${CYGWIN_NOWINPATH-addwinpath} = "addwinpath" ] ; then
      #    PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"  # <= ここ
        else
          PATH="/usr/local/bin:/usr/bin"
        fi
      
      
  2. ORIGINAL_PATHでPATHを上書きする
    • tcshではこの方法では対応できません
    • bashの場合は~/.bashrcに以下の記述を追加する
    • export PATH=$ORIGINAL_PATH
      

参考:

0 件のコメント:

コメントを投稿