Ir para o diretório onde o comando executável mora

2

Este é um truque de linha de comando de um livro - "The Productive Programmer":

pushd 'which java'/..

O autor diz que este comando pode ir temporariamente ao diretório onde o comando executável java mora.

Quando eu digitei este comando no Linux, o Bash reclamou que:

bash: pushd: /usr/bin/java/..: Not a directory

Eu também tentei alterar o diretório para /usr/bin/java/.. diretamente:

$ pushd /usr/bin/java/.. 
bash: pushd: /usr/bin/java/..: Not a directory

Por que eu falhei? Por que não pode mudar para um diretório usando /.. ? Como modificar este comando para realizar a mesma tarefa?

    
por Feng Yu 24.12.2015 / 14:13

1 resposta

5

Isso falha porque /usr/bin/java é um arquivo, não um diretório.

Você pode fazer:

cd "$(dirname "$(which java)")"

Ou use a expansão de parâmetro em zsh :

cd "${"$(which java)"%/*}"
    
por 24.12.2015 / 14:18

Tags