CD-Wechsel in Ordner auf Linux-Rechner nicht möglich. Meldung, dass Datei/Ordner nicht existiert

CD-Wechsel in Ordner auf Linux-Rechner nicht möglich. Meldung, dass Datei/Ordner nicht existiert

Ich habe eine Test-KSH-Datei auf CD in einen Ordner geschrieben und ein Listing erstellt. Folgendes steht darin:

`cd "their_file/"`;

`pwd`;

`ls -l`;

Gibt mir folgende Ausgabe:

./test.ksh: line 2: /home/user/final: Is a directory

./test.ksh: line 3: total: command not found

Dies ist mein Passwort:

/home/Benutzer/final

Wie behebe ich das? Ich vermute, es führt die CD-Anweisung aus und beendet dann die Anweisung. Ich verwende eine Fedora-Maschine.

Antwort1

Die Backticks um jeden Befehl in Ihrem Skript veranlassen die Shell, die Ausgabe des Befehls zu übernehmen und auszuführenDasals Befehl.

Die Verwendung von Backticks um einen Befehl ist gleichbedeutend damit, den Befehl darin einzufügen $( ... )(dies ist die bevorzugte Syntax zum Erfassen der Ausgabe eines Befehls).

Die Fehlermeldung /home/user/final: Is a directorywird beim kshVersuch angezeigt, das Ergebnis von als Befehl auszuführen pwd, bzw. total: command not foundbeim Versuch, das Ergebnis von auszuführen ls -l.

Entfernen Sie die Backticks. Entfernen Sie auch die Semikolons ( ;). Diese sind nur erforderlich, wenn Sie zwei Befehle in dieselbe Zeile setzen möchten:

cd dir; pwd

Ihr Skript sollte ungefähr so ​​aussehen

#!/bin/sh

cd "their_file"
pwd
ls -l

Beachten Sie, dass dies auch dann noch ausgeführt wird pwd, ls -lwenn es cdfehlschlägt. So beenden Sie das Skript, wenn cdes fehlschlägt:

#!/bin/sh

cd "their_file" || exit 1
pwd
ls -l

Dies nutzt die Tatsache, dass cdein Wert ungleich Null zurückgegeben wirdBeendigungsstatuswenn es fehlschlägt. Die ||(logischeoder) vor bedeutet, dass das Skript mit der Ausführung der Anweisung exit 1fortfährt, wenn es „false“ zurückgibt (was in Shell-Skripten ein Exit-Status ungleich Null bedeutet).exitcd


Der Grund, warum Sie bekommen /home/user/final: Is a directoryundnicht /home/user/final/their_file: Is a directoryliegt daran, dass die cdin einemUnterschale(das passiert, wenn Sie es in Backticks oder innerhalb von einfügen $( ... ).) Da es in einer untergeordneten Shell ausgeführt wird, wird die tatsächliche Änderung des Arbeitsverzeichnisses nicht in der übergeordneten Shell (Ihrem Skript) widergespiegelt.

Aus demselben Grund werden Sie feststellen, dass Sie sich nach der Ausführung Ihres Skripts noch immer im selben Verzeichnis befinden wie beim Aufrufen des Skripts und nicht im Verzeichnis their_file.

Weitere Informationen zu diesem Thema finden Sie unter „warum die CD-Funktion im Skript nicht funktioniert" Und "Skript zum Ändern des aktuellen Verzeichnisses (cd, pwd)" (und andere ähnliche Fragen).

verwandte Informationen