80 votes

bash - comment diriger le résultat de la commande cd

Je sais que ce doit être une question stupide, mais comment pourrais-je pipe le résultat d'une commande de cd?

C'est ce que je suis en train de faire:

which oracle | cd
cd < which oracle

Mais aucun d'eux travaux :(

Est-il un moyen de le faire (plutôt que de copier/coller, bien entendu)?

Merci beaucoup à l'avance!

Edit : à la réflexion, cette commande échoue, parce que le fichier de destination n'est PAS un dossier/répertoire.

Je suis donc penser et de travailler à un meilleur moyen de se débarrasser de la fin "/oracle" maintenant la partie (sed ou awk, ou encore Perl) :)

Edit : Ok c'est ce que j'ai à la fin:

cd `which oracle | sed 's/\/oracle//g'`

113voto

mykhal Points 5873

Vous utilisez un tuyau dans le cas où la commande attend de paramètres à partir de l'entrée standard. ( Plus sur cela ).

Avec cd commande qui n'est pas le cas. Le répertoire est l'argument de la commande. Dans de tels cas, vous pouvez utiliser la substitution de commande. Utiliser des backticks ou $(...) à évaluer la maîtrise, de la stocker dans la variable..

path=`which oracle`
echo $path # just for debug
cd $path

bien qu'il peut être fait de façon beaucoup plus simple:

cd `which oracle`

ou

cd $(which oracle)

ce qui est équivalent à backtick la notation, mais est recommandée (backticks peut être confondu avec des apostrophes)

.. mais il semble que vous souhaitez:

cd $(dirname $(which oracle))

(qui vous montre que vous pouvez utiliser l'imbrication facilement)

$(...) (ainsi que les backticks) fonctionnent également en double-chaînes entre guillemets, ce qui aide quand le résultat peut éventuellement contenir d'espaces..

cd "$(dirname $(which oracle))"

23voto

RC. Points 18567

Avec dirname pour obtenir le répertoire:

 cd $(which oracle | xargs dirname)
 

9voto

Cfreak Points 10831
 cd `which oracle`
 

Notez que ce sont des backticks (généralement la touche à gauche de 1 sur un clavier américain)

4voto

Philipp Points 21479

OK, voici une solution qui utilise la citation correcte:

 cd "$(dirname "$(which oracle)")"
 

Évitez les backticks, ils sont moins lisibles et citez toujours les substitutions de processus.

1voto

David Z Points 49476

En réponse à votre question modifiée, vous pouvez supprimer le nom de la commande en utilisant dirname :

 cd $(dirname `which oracle`)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X