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を実行しています。
/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
これは別の答えです 特に一時的なオーバーライドとしては適切です。完全を期すために、これがその要点です。
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
のように)、そのような問題はありません。
どうやら:
export PATH="/usr/local/Cellar/nano/2.9.1/bin:$PATH"
トリックを行います。
これを.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
}