Pfade verwalten - Verzeichnisse in Shell und Skripten

0

Kommandozeile und Skripterstellung sind weitaus vertrauter. Skripten und Programmieren ist mein oberstes Ziel und meine 100.000-Dollar-Frage? Ich bin allerdings noch nicht von Fenstern abgeschnitten.

Der Beitrag hier -> hat ein User-Dilemma gelöst ! hat viel dazu beigetragen, die Verwendung von / das Wechseln von Pfaden und Verzeichnissen zu vereinfachen. Besser als notepad ++ zu öffnen und es zu tun! Speziell dieser Befehl

# cd "$(cygpath -u 'c:\Program Files\')" 

von ben. arbeitet für mich fliegend in bash, um Skripte effizient erstellen zu können.

Kann jemand für die Programmierung es Stück für Stück aufschlüsseln?

Mir ist aufgefallen, dass es 2 Befehle und - Anführungszeichen gibt und die Klammern 'trennen' das $, von dem ich annehme, dass es ein variabler Platzhalter ist ???

Ich denke am Ende immer, dass es eine Shell ist, die darin aufgebaut ist, die einfache Antwort, aber ich muss es immer noch herausfinden. Und die doppelten Anführungszeichen außerhalb sind für was, während innere Anführungszeichen für Raum und wörtliche Interpretationen von Shell sind.

Was genau macht die Shell von Anfang bis Ende? Das Ausführen eines Debugs könnte meiner Meinung nach eine Option sein. Wie mache ich das, um Ausgaben anzuzeigen? Danke für die Antwort.

Zuletzt habe ich nicht erwähnt, was ich verwendet habe, um Pfade zu konvertieren. Sah Sachen für sed Saiten, funktionierte aber nie wegen der Komplexität, das ist viel einfacher.

Sircutz
quelle

Antworten:

1

Ein häufiges Missverständnis ist, dass das $ -Zeichen eine Variable bedeutet. Tatsächlich signalisiert es bash, eine Erweiterung durchzuführen (Es gibt Fälle, in denen auf Variablen ohne das $ -Zeichen verwiesen werden kann, aber ich komme nicht zu weit vom Thema).

Wenn bash das $ -Zeichen vor einer Variablen sieht, wird die $ VAR durch den Wert (der Variablen) ersetzt und anschließend die gesamte Zeile ausgeführt.

In Ihrem Beispiel führt bash eine Befehlsersetzung / -erweiterung durch. Zwischen den Klammern steht ein Befehl. Bash führt diesen Befehl zuerst aus, nimmt die Ausgabe und ersetzt das $ (Befehl) damit und führt dann den cdBefehl aus.

Sie können dieses Verhalten beobachten, indem Sie sich eine Spur ansehen. Führen Sie Ihr Skript mit bash -xoder set -o xtraceunter der Überschrift Ihres Skripts aus. Beispiel:

#!/bin/bash
set -o xtrace

Dies gibt die genauen Befehle aus, die bash während des Skripts ausführt, dh nachdem Ersetzungen / Erweiterungen stattgefunden haben.

Die Anführungszeichen sind nicht zu 100% erforderlich, aber es kann Situationen geben, in denen der Befehl in Ihrem Beispiel nicht ordnungsgemäß funktioniert. Und das ist, wenn der von zurückgegebene Pfad Leerzeichen enthält cygpath -u 'c:\Program Files\'. Bash-Befehlsargumente werden normalerweise durch Leerzeichen begrenzt. Ohne die Anführungszeichen interpretiert bash diese Leerzeichen als Begrenzer und nicht als wörtliches Leerzeichen (auch der Grund, warum der für den Befehl cygpath angegebene Pfad in einfachen Anführungszeichen steht).

Zum Beispiel, wenn der zurückgegebene Pfad war c:\user\Documents and Settingslesen würde, mit aus Anführungszeichen bash den Befehl als cd c:\user\Documents and Settings, in der sie das denken c:\user\Documents, andund Settingssind alle Argumente an die weitergegeben werden cdBefehl. Dies ist ein Problem, da der cdBefehl nur ein Argument haben soll.

Doppelte Anführungszeichen um die $ -Substitution verhindern die Leerzeicheninterpretation.

Chip Shadd
quelle
Ich danke dir sehr. Meine Frage wurde zu 100 Prozent beantwortet. Das Lesen von Manpages für bash, xtrace oder set für vollständige Details ist sehr wertvoll. Arbeiten Sie noch daran, da ich keine Skripte verwende, alles eingetippt ist und ich nicht weiß, wo ich das xtrace ablegen soll? Versucht, ohne $ und es Schleifen (keine Rückgabe ausgegeben). Danke noch einmal.
Sircutz
@Sircutz Platziere es direkt unter dem #! / Bin / bash, ich habe meine Antwort bearbeitet, um dies widerzuspiegeln. Dies gilt nur, wenn Sie über ein Shell-Skript (.sh) verfügen, das Sie ausführen.
Chip Shadd
Ich nahm an, dass der Befehl als Skript ausgeführt werden musste. Ich kann damit umgehen - mache eine Datei, chmods für die ausführbare Berechtigung und führe sie aus. Ich kann es kaum erwarten zu sehen, was darauf steht. Danke noch einmal.
Sircutz
Baute es und lief es. Die xtrace-Ausgabe ist fantastisch, aber "mein Shell-Skript" kann nicht das tun, was ich wollte - navigieren. Hier ist das Skript und dann die Ausgabe von Bash.
Sircutz
#! / bin / bash set -o xtrace cd "$ (cygpath -u 'C: \ Dokumente und Einstellungen \ Administrator \ Eigene Dateien \ Downloads')" \;
Sircutz