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