web-dev-qa-db-ja.com

Mac OSXでNanoのデフォルトバージョンを変更する

nanoを実行すると、Mac OSXターミナルのデフォルトとしてnano2.0.6が使用されます。 /usr/local/Cellar/nano/2.9.1/bin/nanoにnano2.9.1があります。

ターミナルでデフォルトのnanoをバージョン2.9.1に変更するにはどうすればよいですか?

Mac OS X10.13.1を実行しています。

3
Michael Nielsen

/usr/local/Cellar/nano/2.9.1/bin/nanoから/usr/local/binへのシンボリックリンクを作成できます

ln -s /usr/local/Cellar/nano/2.9.1/bin/nano /usr/local/bin/nano

または、エイリアスを作成することもできます。

alias nano=/usr/local/Cellar/nano/2.9.1/bin/nano
2
fd0

これは別の答えです 特に一時的なオーバーライドとしては適切です。完全を期すために、これがその要点です。

export PATH="/usr/local/Cellar/nano/2.9.1/bin:$PATH"

問題は、複数のツールの永続的な解決策が必要な場合、そのような単純なアプローチでは、$PATHが不必要に肥大化することです。

これはこれを回避する方法です(Debianの場合、質問はMac OS Xに関するものですが、ソリューションも適用されるか、簡単に適応できると思います)。まず、独自のbin/を作成します。

mkdir ~/bin/

(編集:macOSでは、~/Library/bin/はホームフォルダーの編成に少し適しています。ただし、答えを変更しないことにしました。このパスをニーズに合わせて調整してください。)

次に、$PATHを変更します。

PATH=~/bin:"$PATH"

(永続的にしたい場合は、以下の注1を参照してください。)

次に、目的のnano(およびその他のバイナリ)をカスタムbin/にシンボリックリンクします。

ln -s /usr/local/Cellar/nano/2.9.1/bin/nano ~/bin/

(このnanoをすぐに使用したい場合は、以下の注2を参照してください。)

このアプローチには、次の利点があります。

  • あなたの$PATHは比較的短くてきれいなままです。
  • ls -l ~/bin/を使用すると、どのツールを何でオーバーライドするかを簡単に判断できます。これは、ディレクトリを指定する肥大化した$PATHを分析するよりもはるかに優れています。すべてのディレクトリには多くの実行可能ファイルが含まれている可能性があり、それらを知るにはとにかくlsする必要があります。
  • シンボリックリンクを削除して新しく作成することは、特にスクリプト内から$PATHを変更するよりもはるかに簡単です。
  • 独自のスクリプトを~/bin/に配置することもできます。

注1:私のDebianでは、/etc/skel/.profileには次のコードが含まれています。

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

私の~/.profile/etc/skel/.profileのコピーとして作成されたので、コードは最初からそこにあります。これは、すべての新しいシェルセッションがその$PATHを調整して私のプライベートbin/を含めることを意味します。私がしなければならなかったのはディレクトリを作成することだけでした。


注2:セッションの途中で$PATHを変更するとき(たとえば、ソリューションをテストするため)、シェルが古い$PATHに従って既に検索した実行可能ファイルの古い場所を記憶している可能性があることに注意してください。 。一般的なシェルは、これを管理するために hash 組み込みを使用します。必要に応じてhash -rを使用してください。

シェルセッションの最初に$PATHをカスタマイズする場合(.profileのように)、そのような問題はありません。

2

どうやら:

export PATH="/usr/local/Cellar/nano/2.9.1/bin:$PATH"

トリックを行います。

1
Michael Nielsen

これを.bashrc/.zshrc/etcに追加することもできます

function nano {
    local nano_ver=$(l /usr/local/Cellar/nano/)
    /usr/local/Cellar/nano/$nano_ver/bin/nano $1
}

構文の強調表示を備えた完璧な関数は次のようになります。

function nano {
    local nano_ver=$(l /usr/local/Cellar/nano/)
    if [ ! -f  ~/.nanorc ]; then
        touch ~/.nanorc
    else
        truncate -s 0 ~/.nanorc
    fi
    echo "include /usr/local/Cellar/nano/$nano_ver/share/nano/*.nanorc" >> ~/.nanorc
    /usr/local/Cellar/nano/$nano_ver/bin/nano $1
}
0
Mahorad