GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gibt es eine ausführbare Standard-Dummy-Datei, die unter Linux nichts tut?

Es gibt die Standard-Utilities true und false . Der erste gibt nur einen Exit-Status von 0 für eine erfolgreiche Ausführung zurück, der zweite gibt nur einen Wert ungleich Null zurück, der ein nicht erfolgreiches Ergebnis anzeigt. Sie möchten wahrscheinlich das erste.

Einige Systeme, die wirklich möchten, dass Sie Text eingeben (Commit-Nachrichten usw.), prüfen jedoch, ob die "bearbeitete" Datei tatsächlich geändert wurde, und führen einfach true aus würde in dem Fall nicht fliegen. Stattdessen touch könnte funktionieren; es aktualisiert die Zeitstempel aller Dateien, die es als Argumente erhält.

Wenn der Editor jedoch andere Argumente als den Dateinamen touch erhält würde diese als Dateien erstellen. Viele Editoren unterstützen ein Argument wie +NNN um der Anfangszeile mitzuteilen, dass der Cursor hineingesetzt werden soll, und so kann der Editor als $EDITOR +123 filename.txt aufgerufen werden . (z. B. less tut dies, git scheint nicht.)

Beachten Sie, dass Sie true verwenden sollten , nicht z. /bin/true . Erstens, wenn eine Shell beteiligt ist, ermöglicht die Angabe des Befehls ohne Pfad, dass die Shell eine eingebaute Implementierung verwendet, und wenn keine Shell verwendet wird, wird die Binärdatei in PATH gefunden ohnehin. Zweitens haben nicht alle Systeme /bin/true; z.B. unter macOS ist es /usr/bin/true . (Danke @jpaugh.)

(* oder wie es die GNU-Manpage ausdrückt, falsch "[macht] nichts, erfolglos". Danke @8bittree.)


In der Shell können Sie den eingebauten : verwenden . Es ist keine ausführbare Datei, aber in einem Shell-Skript oder irgendetwas, das von einem Shell-Skript ausgeführt wird, wird es Folgendes tun:

$ help :
:: :
    Null command.
     
    No effect; the command does nothing.
     
    Exit Status:
    Always succeeds.

Dies ist vielleicht am besten für die Verwendung in einer while-Anweisung bekannt (while :; do break; done ), ist jedoch nicht auf eine solche Verwendung beschränkt. Falls Sie dies mehrmals tun müssen, ist es viel schneller, keinen separaten Prozess zu starten:

$ time for i in $(seq 1000); do :; done

real    0m0,007s
user    0m0,002s
sys     0m0,004s
$ time for i in $(seq 1000); do /bin/true; done

real    0m0,686s
user    0m0,462s
sys     0m0,217s

@ilkkachus Vorschlag, den true zu verwenden Befehl ist wahrscheinlich die beste Antwort, aber Sie könnten auch den Befehl

verwenden
sleep 0

Linux
  1. Linux – Wie überprüft man die Verzeichnisstrukturinformationen einer Unix/Linux-Datei?

  2. Suchen Sie die Datei und wechseln Sie dann in dieses Verzeichnis in Linux

  3. Linux-Shell-Sortierdatei nach der zweiten Spalte?

  4. Verwendung von rz und sz unter Linux-Shell

  5. Templating mit Linux in einem Shell-Skript?

Linux-Dateibefehl:Was macht er und wie wird er verwendet?

Wie man eine Datei unter Linux ausführbar macht

Linux – Dateisynchronisierung in Echtzeit?

Wie mache ich eine Datei im Linux-Terminal ausführbar?

Gibt es eine Shell, die überprüft, ob der Code signiert ist?

Die ausführbare Linux-Datei schlägt mit Datei nicht gefunden fehl, obwohl die Datei dort und in PATH vorhanden ist