Use dirname
:
cd "'dirname $(which program)'"
Eu gostaria de pegar a saída de um comando which e cd para o diretório pai. Por exemplo, digamos que eu tenha o seguinte:
which someprogram
Com saída:
/home/me/somedirectory/someprogram
Eu gostaria de fazer um cd para o diretório em que alguns programas residem:
cd /home/me/somedirectory
Eu gostaria de conseguir isso em uma linha. Qual é a maneira mais elegante, complicada e curta de fazer isso?
No bash, recomendo type -p
over which
. which
é um comando externo e, às vezes, é complicado . Você pode usar sed
para remover tudo após o /
final ou usar o utilitário dirname
de finalidade especial.
cd "$(dirname -- "$(type -p program)")"
cd "$(type -p program | sed 's:[^/]*$::')"
Na linha de comando, se você sabe que o diretório não contém caracteres especiais (espaço em branco ou \[?*
), você pode omitir as aspas. Você também pode usar backquotes em vez de um dos $(…)
(aninhar backquotes é difícil, não vale a pena aqui).
cd 'dirname $(type -p program)'
cd $(dirname 'type -p program')
cd 'type -p program | sed 's:[^/]*$::''
No zsh, há uma sintaxe mais compacta.
cd ${$(whence -p program):h}
cd ${$(echo =program):h}
cd ${${_+=program}:h}
(Sim, esse último é enigmático. Ele usa a sintaxe ${VAR+TEXT}
na variável _
, com o valor sendo =program
, que é equivalente a $(whence -p program)
.)
Tags bash cd-command which