Wie führe ich eine ausführbare Datei aus einem anderen Verzeichnis aus, ohne die CD zu drücken oder den Pfad zu ändern?

Wie führe ich eine ausführbare Datei aus einem anderen Verzeichnis aus, ohne die CD zu drücken oder den Pfad zu ändern?

Es gibt ähnliche Varianten zu der Frage, die ich stellen möchte, aber ich konnte die genaue Frage nicht finden, deshalb stelle ich sie hier.

Nehmen wir an, ich habe eine kompilierte .cDatei, die eine ausführbare Datei ergibt ex, die sich unter befindet /mnt/f/C_F/ex. Ich kann sie sehr gut von innen ausführen, /mnt/f/C_Faber ./exwas, wenn ich das beispielsweise von (oder einem beliebigen anderen Verzeichnis) aus tun möchte /mnt/f? Ich möchte /mnt/f/C_F/dafür nichts zu PATH hinzufügen.

Ich konnte keine Lösung finden und nehme an, dass dies nicht möglich ist. Bitte bestätigen Sie dies.

Antwort1

Verwenden Sie einen absoluten Pfad zu dieser Datei.

/mnt/f/C_F/ex

Dies sollte immer funktionieren, unabhängig von Ihrem aktuellen Arbeitsverzeichnis. Generell sollten Sie aus diesem Grund absolute Pfade innerhalb von Skripten bevorzugen (es gibt jedoch wichtige Ausnahmen).

Antwort2

Sie können immer den relativen oder vollständigen Pfad zu Ihrer ausführbaren Datei verwenden

Wenn Sie in sind /mnt/f, können Sie Folgendes ausführen:

C_F/ex
# or
/mnt/f/C_F/ex

Antwort3

BeliebigWeg1 zur ausführbaren Datei, die mindestens ein /Werk enthält.Das Vorhandensein eines /Zeichens in einem Befehlsnamen teilt der Shell mit, dass Sie sie auffordern, eine bestimmte Datei auszuführen, und dass Sie den spezifischen Ort angeben, an dem diese Datei zu finden ist. Dies ist Teil der Syntax, die die Shell erwartet; in den meisten anderen Kontexten ist es akzeptabel, dass (relative) Pfade kein /Zeichen enthalten.

Für eine ausführbare Datei, die sich nicht im aktuellen Verzeichnis befindet,das ist überhaupt ein Weg dorthin. Es gibt keine Möglichkeit, den Pfad einer Datei in ein anderes Verzeichnis zu schreiben, ohne mindestens einen zu verwenden /. Dadurch ist das Ausführen von Dateien in anderen Verzeichnissen der einfachere Fall, auch wenn dies weniger geläufig ist.

  • Absolute Pfade--wie/mnt/f/C_F/ex--beginnen mit /.

  • Relative Pfadein eine Datei in einem anderen Verzeichnis--C_F/exwenn Sie sich im /mnt/fVerzeichnis befinden – enthält immer ein /, auch wenn es nicht am Anfang steht. Ein relativer Pfad ohne ein /ist nur ein Dateiname, der eine Datei im aktuellen Verzeichnis identifiziert. (Das Gegenteil ist jedoch nicht der Fall. Ein relativer Pfad kann ein enthalten und /dennoch auf eine Datei im aktuellen Verzeichnis verweisen; siehe unten.)

    Beachten Sie, dass relative Pfade immer noch auf die gewünschte Datei verweisen müssen, wenn sie funktionieren sollen, und ob ein relativer Pfad auf die gewünschte Datei verweist oder nichthängt davon ab, in welchem ​​Verzeichnis Sie sich gerade befinden, da sie relativ zum aktuellen Verzeichnis aufgelöst werden.

Für eine ausführbare Datei, dieIstim aktuellen Verzeichnis funktioniert der kürzeste relative Pfad im Allgemeinen nicht, da er kein enthält /. Dies ist also der kompliziertere Fall, auch wenn er bekannter ist. Wenn Sie sich im Verzeichnis befinden, in dem sich eine ausführbare Datei exbefindet, können Sie nicht einfach ausführen ex, obwohl exein vollkommen guter relativer Pfad zu dieser ausführbaren Datei ist.

Der Grund dafür, dass es nicht funktioniert, ist, dass ein Befehlsname, der kein enthält, /nicht als relativer Pfad oder als beliebiger Pfad behandelt wird. Stattdessenes wird als Dateiname behandelt und danach gesuchtin den Verzeichnissen unter $PATH. 2

Aus diesem Grund verwenden Sie, ./exwenn Sie sich im selben Verzeichnis befinden wie ex.Jedes Verzeichnis enthält einen .Eintrag, der auf das Verzeichnis selbst verweist.bietet eine Möglichkeitum einen relativen Pfad zu schreiben, der dieselbe Datei identifiziert wie, exaber ein enthält /und daher als Befehlsname verwendet werden kann, den die Shell als Pfad behandelt.

Ein ./Präfix ist daher keine spezielle Syntax, sondern lediglich die zweiteinfachste Möglichkeit, einen relativen Pfad zu einer Datei im aktuellen Verzeichnis zu schreiben, und die einfachste Möglichkeit hierzu von denen, die ein . enthalten /.


1 In dieser Antwort verwende ich "Pfad" im Sinne von "Pfadname". Dies ist die häufigste Verwendung von "Pfad", aber nicht die einzige. "Pfad", wie ich den Begriff hier verwende, sollte nicht verwechselt werden mit demausführbarer Suchpfad, also die Sammlung von Verzeichnissen, deren Pfade durch :Zeichen getrennt aufgelistet sind,in der $PATHUmgebungsvariable.

2 Befehlsnamen, die kein „“ enthalten, /können auch als nicht externe Befehle aufgelöst werden, wie etwa Shell-Builtins und Shell-Funktionen.

verwandte Informationen