Saída de qual comando usado para entrada para cd

7

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?

    
por Charlotte 01.12.2011 / 18:45

2 respostas

13

Use dirname :

cd "'dirname $(which program)'"
    
por 01.12.2011 / 18:52
5

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) .)

    
por 02.12.2011 / 02:20