
Plattform: CentOS 6.2
Schale:tcsh
Ich spiele mit cd
einem BASH-Skript herum und bemerkte das wundersamecd -
Möglichkeit, aber es blieben viele Fragen zurück …
- Warum das
cd -
? Ist das nicht redundant mitcd ..
?
BEARBEITEN
[Wie FatalError anmerkt, bewirken diese beiden Befehle nicht dasselbe … die Antwort lautet also „nein“] - Können Sie mit Flag weiter in Ihren Verlauf zurückgehen
-
, wie in einem Browser?
Wenn ich z. B. eingebecd -
, gelange ich zu meinem vorherigen Verzeichnis, aber wenn ich den Befehl dann erneut eingebe, gelange ich zu dem Verzeichnis, aus dem ich gerade gekommen bin, wodurch eine Art Schleife entsteht.
Wird eine Abkürzung für das Zurückgehen auf mehrere Ebenen unterstützt?
BEARBEITEN
Mir ist klar, dass ich mit zurückgehen kanncd ..
, aber ich hatte gehofft, dass dies ein Tor zu einem weniger wortreichen Deep Back sein könnte, z. B.cd -3
vs.cd ../../../
... hoffentlich verdeutlicht das, was ich frage …
BEARBEITEN2
Was das aktuelle Feedback betrifft, so..
ist es zwar ein spezielles Verzeichnis, aber ich sehe keinen Grund, warum die integrierte Funktioncd
des Terminals nicht eine Abkürzung für../../ ... ../
eg verwenden könntecd ..5
oder warum die integrierte Funktion nicht auch einen Verlauf (wie autopushd
/popd
) haben könnte, der aktiviert und wie verwendet werden könntecd -3
. Ich verstehe, dass dies ein gewisses Sicherheits-/Datenschutzrisiko darstellen könnte, aber ich sehe nicht, wie es schlimmer sein könnte, als einen Befehlsverlauf zu speichern, was die meisten Shells/Terminals tun. - Die Manpage für
cd
, die überman cd
und zugänglich isthelp cd
(sie ist für beide Befehle gleich), listet nur-L
die-P
Flags auf.
Wenn ich jedoch eingebe,cd --help
wird ausgegebenUsage: cd [-plvn][-|<dir>].
.
Gehe ich recht in der Annahme, dass die anderen Flags und die Option - (Zurück) nicht standardmäßig sind? - Wofür sind die Flags
-n
und-v
?
Beide scheinen mich zu meinem Home-Verzeichnis zurückzuleiten, das ist alles, was ich durch Experimentieren herausfinden konnte.
Eine kurze Lektüre zu Webressourcen[1][2]bot genau die gleichen Informationen wie die Manpage und beantwortete meine Fragen nicht.
Hinweis: Die zweite oben genannte Linux-zentrierte Ressource cd
hatte nur zwei Optionen (was derzeit offensichtlich nicht der Fall ist CentOS
), daher meine Annahme, dass diese Funktionalität nicht standardmäßig sein könnte.
Antwort1
cd -
ist nicht dasselbe wiecd ..
. Dercd -
Befehl geht an dievorherigeVerzeichnis, in dem Sie sich befanden. Wenn Sie sich beispielsweise in befinden/home/bob
und dann ausführencd /var/log
,cd -
gelangen Sie durch Ausführen zurück zu/home/bob
.cd ..
Andererseits gelangt man immer in das übergeordnete Verzeichnis.Wenn Sie einen solchen Verlauf aufbewahren möchten, empfehle ich Ihnen, sich Folgendes anzusehen:
pushd
undpopd
ermöglicht Ihnen die Verwendung eines „Verzeichnisstapels“:user@host:/etc/init.d$ pushd /var/log /var/log /etc/init.d user@host:/var/log$ pushd /tmp /tmp /var/log /etc/init.d user@host:/tmp$ popd /var/log /etc/init.d user@host:/var/log$ popd /etc/init.d
Was das Zurückgehen um mehrere Ebenen im Verzeichnisbaum betrifft, gibt es meines Wissens keine gängige Methode.
..
Dies ist keine Funktion der Shell, sondern tatsächlich ein spezieller Verzeichnislink in *nix, der auf das übergeordnete Verzeichnis verweist.cd
ist ein integrierter Befehl, daher können seine Flags und Verwendung je nach Shell unterschiedlich sein. Aber im Allgemeinen sollten die Optionencd
aufbash
einem System dieselben sein wie auf einem anderen System.Meine
bash
Shell listet keines dieser Flags auf. Experimentieren Sie mitbash
odertcsh
? Wenn Sie verwenden,tcsh
verwenden Sie im Wesentlichen einen völlig anderen Befehl. Sie möchten ihn also wahrscheinlich dort ausführenbash
und damit herumspielencd
.
BEARBEITEN:
Laut der tcsh
Manpage:
Mit -p wird der endgültige Verzeichnisstapel gedruckt, genau wie bei dirs. Die Flags -l, -n und -v haben auf cd dieselbe Wirkung wie auf dirs und implizieren -p.
(Wenn Sie die Einzelheiten lesen möchten, können Sie den Abschnitt darüber lesen dirs
.) Es sieht so aus, als würde es im Wesentlichen dazu führen, dass der Verzeichnisstapel gedruckt wird, nachdem der Befehl ausgeführt wurde:
host:43> pushd /etc/init.d
/etc/init.d ~
host:44> pushd /var/log
/var/log /etc/init.d ~
host:45> pushd /tmp
/tmp /var/log /etc/init.d ~
host:46> cd -p
~ /var/log /etc/init.d ~
host:47> cd -v
0 ~
1 /var/log
2 /etc/init.d
3 ~
host:48> popd
/var/log /etc/init.d ~
host:49> cd -v
0 ~
1 /etc/init.d
2 ~
beide zeigen den Verzeichnisstapel, -v
sind aber etwas leichter zu lesen. Die Spitze des Stapels (Element 0) ist das aktuelle Verzeichnis, und 1 ist das Verzeichnis, in das Sie gelangen, wenn Sie es popd
einmal ausführen, und so weiter.