Ich möchte die Ausgabe eines which-Befehls und eine CD in das übergeordnete Verzeichnis übernehmen. Angenommen, ich habe Folgendes:
which someprogram
Mit Ausgabe:
/home/me/somedirectory/someprogram
Und ich möchte in das Verzeichnis cd, in dem ein Programm lebt:
cd /home/me/somedirectory
Ich möchte dies in einer Zeile erreichen. Was ist der eleganteste, kniffligste und kurzeste Weg, dies zu tun?
bash
cd-command
which
Naja eigentlich
quelle
quelle
$()
anstelle von Backticks verwenden:cd $(dirname $(which program))
$()
aufgrund der vielen Vorteile von$()
Backticks schrittweise zugunsten von Backticks auslaufen sollten.In Bash empfehle ich
type -p
überwhich
.which
ist ein externer Befehl und manchmal schwierig . Sie können verwendensed
, um alles nach dem Finale zu entfernen/
, oder das Spezialdienstprogramm verwendendirname
.Wenn Sie in der Befehlszeile wissen, dass das Verzeichnis keine Sonderzeichen (Leerzeichen oder
\[?*
) enthält, können Sie die Anführungszeichen weglassen. Sie können auch Backquotes anstelle eines der Backquotes verwenden$(…)
(das Verschachteln von Backquotes ist schwierig, hier nicht wert).In zsh gibt es eine kompaktere Syntax.
(Ja, das letzte ist kryptisch. Es verwendet die
${VAR+TEXT}
Syntax für die_
Variable, wobei der Wert=program
dem entspricht$(whence -p program)
.)quelle