Passe a saída do comando “whereis” para “cd” para alterar o diretório em uma única etapa

2

Deve ser simples, sem dúvida, mas não consigo encontrar uma maneira de passar a saída do comando whereis para o comando cd na mesma linha, para que não seja necessário cd na segunda etapa .

Eu tentei passar como abaixo:

cd $(whereis node_modules)

Ou

cd "'dirname $(whereis node_modules)'"

cd "$(whereis node_modules)"

Mas nenhum dos métodos acima funciona.

Alguém pode encontrar o que deve estar errado nos códigos acima?

    
por Vicky Dev 17.06.2016 / 06:40

3 respostas

4

Você pode fazer isso com

cd "'which node_modules'"

Com dirname para obter o diretório:

cd "$(dirname "$(which node_modules)" )"

como você mencionou no comentário Estou esperando fazer isso em uma etapa & assumindo nod_module é um diretório, então você pode fazer isso com o seguinte comando:

cd $(whereis node_modules | cut -d ' ' -f2)

(Note que o último comando assume que o Linux whereis está sendo usado, não o do BSD, e que o caminho não contém espaços).

Como sugerido por @Dani_I, você pode dar uma olhada neste Por que não usar" qual "? O que usar então? , que pode ser mais útil.

    
por 17.06.2016 / 06:43
5

Isso parece fazer o truque:

cd "$(dirname "$(whereis node_modules)")"

Se, de acordo com o seu comentário, você quiser ir para o destino, se for um diretório:

location=$(whereis node_modules)
if [[ -d "$location" ]]; then
    cd "$location"
else
    cd "$(dirname "$location" )"
fi

O texto acima poderia ser facilmente transformado em uma função no seu .bash_profile .

    
por 17.06.2016 / 06:43
3

whereis fornece o nome do padrão e o local, separados por dois pontos, portanto, executar cd ou dirname on whereis result não funciona:

$ whereis node_modules
node_modules: /usr/lib/node_modules

O método apropriado está usando npm para obter seu prefixo padrão:

$ cd "$(npm get prefix)/lib/node_modules"
$ pwd
/usr/lib/node_modules
    
por 17.06.2016 / 06:54