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
sleep 0