命令がインストールされているかどうかを確認する方法を知りたいです。
vi
特に、コマンドが有効なすべてのシステムでエイリアスを使用したいと思いますvim
。vim
私の* rcファイルを普通に保ちたいです。ただし、一部のオペレーティングシステムはデフォルトでインストールしませんvim
。そして他の面では、vi
はいViは改善されましたが、vim
有効なコマンドではありません。
私はこれを行うことができると思います(bashスタイル):
#If the version info from vi includes the phrase "Vi IMproved", then vi IS vim.
vimInfo=$(vi --version 2> /dev/null | head -n 1 | grep -Fi 'VI IMPROVED')
if [[ -z $vimInfo ]]; then
if [[ -f $(which vim) ]]; then
#if the value returned by 'which' is a valid directory, then vim is installed
alias vi='vim'
else
#vim is not installed
echo "Vi IMproved (vim) is not installed";
fi
fi
しかし、もっと良い方法がありますか?このwhich
コマンドは、すべてのUNIXシリーズシステムに表示されることが保証されていますか?
PS私はほとんどすべての人気シェル(bash、tcsh、zsh、ksh)の* rcファイルを持っており、このソリューションをすべてのシェルに適用する予定です。したがって、ソリューションはシェルに限定されるべきではありません。文法できるしかし、そうです。
答え1
たとえば、次のようになりますcommand
。
command -v vim
シェル組み込みコマンドです。 (zsh、bash、ksh、しかし、tcsh)
存在するtcsh以下を使用できます。
~> sh -c 'command -v vim'
答え2
私はあなたが問題をあまりにも複雑に考えていると思います。
if type vim >/dev/null 2>/dev/null; then
alias vi=vim
fi
vim
実行する唯一の理由vi
は、これらのコマンドには有効なシステムがありますが、インストールが破損しているか、同じ名前の別のプログラムがある場合です。
このtype
組み込み機能は、すべてのPOSIXシェルとほとんどのBourneシェルにあります。 cshから(そしてcshでのみ)、使用which
:
if ({ which vim }) alias vi vim >&/dev/null
魚の場合:
if type vim >/dev/null 2>/dev/null; alias vi=vim; end