command -pv
usa um "valor padrão para PATH".
$ which ruby
/home/mikel/.rvm/rubies/ruby-1.9.3-p484/bin/ruby
$ command -pv ruby
/usr/bin/ruby
Infelizmente, isso não funciona em zsh
, então, com base no comentário de Stephane, poderíamos usar getconf PATH
:
$ PATH=$(getconf PATH) which ruby
ou use command -v
no lugar de which
, conforme recomendado em Por que não usar" que "? O que usar então?
$ PATH=$(getconf PATH) command -v ruby
A desvantagem dessas abordagens é que, se o administrador do sistema instalasse uma versão do sistema em /usr/local/bin
ou /opt/local/bin
, e todos os usuários tivessem isso em PATH
(por exemplo, via /etc/profile
ou /etc/environment
ou semelhante), o acima provavelmente não iria encontrá-lo.
No seu caso específico, sugiro tentar algo específico para Ruby. Veja algumas ideias que podem funcionar:
-
Filtrar versões no diretório pessoal do usuário (e caminhos relativos):
( IFS=: set -f for dir in $PATH; do case $dir/ in "$HOME/"*) ;; /*/) if [ -f "$dir/ruby" ] && [ -x "$dir/ruby" ]; then printf '%s\n' "$dir/ruby" break fi;; esac done )
-
Filtre as versões no diretório rvm
( IFS=: set -f for dir in $PATH; do case $dir/ in "$rvmpath/"*) ;; /*/) if [ -f "$dir/ruby" ] && [ -x "$dir/ruby" ]; then printf '%s\n' "$dir/ruby" break fi;; esac done )
-
Filtre rubis graváveis (último recurso, presume que não está sendo executado como root)
( IFS=: set -f for dir in $PATH; do case $dir/ in /*/) ruby=$dir/ruby if [ -f "$ruby" ] && [ -x "$ruby" ] && [ ! -w "$ruby" ]; then printf '%s\n' "$ruby" break fi;; esac done )
-
Peça
rvm
,chruby
, etc.( rvm system chruby system command -v ruby )
A última maneira faz com que rvm
selecione o Ruby padrão, mas o fazemos em um subshell, para que o Ruby preferido do usuário seja restaurado posteriormente. ( chruby
parte não testada.)