Verwenden Sie den integrierten Befehl "time" in bash anstelle des externen Befehls


12

Bei der Arbeit mit dem timeBefehl stieß ich auf eine Situation, in der ich den eingebauten timeBefehl anstelle des externen GNU-Zeitbefehls verwenden sollte /usr/bin/time. Also, wie kann ich das machen? Ich habe irgendwo gesehen, dass die Verwendung enableund / oder commandwürde helfen, aber sie haben nicht.

Dies ist ein Anwendungsfall:

watch "time ls"

das benutzt den externen /usr/bin/timebefehl, den ich nicht will! Dies passiert, wenn timeich die interne Bash-Funktion time lsauf einem Terminal wie folgt ausführe :

$ time ls

Bitte beachten Sie, dass die genau entgegengesetzte Anfrage hier beantwortet wurde:

Bei zwei Befehlen gibt es einen großen Unterschied. Das interne timeist genauer (was ich will), aber der externe Befehl hat mehr Optionen (die ich nicht brauche).


watch 'bash -c "builtin time ls"'vielleicht?
Glenn Jackman

1
siehe hier, wie man bash zwingt, Builtins zu verwenden, siehe antwort2 von petr utzl: builtin timesollte den trick machen.
Fiximan

2
@Fiximan, timeist kein eingebautes bash, es ist ein reserviertes Wort der Sprache, so dass Sie Pipelines (wie time foo | bar) oder zusammengesetzte Befehle (wie time for i in...;done)
Stéphane Chazelas

Antworten:


13

Standardmäßig wird watchIhr Befehl mit /bin/sh -c '...'der Ausgabe ausgeführt, die Sie sehen, wie /bin/shder timeBefehl interpretiert wird . Ihr /bin/shhabt anscheinend kein eingebautes time.

Um den Befehl mit einer anderen Shell auszuführen, verwenden Sie die -xWenn Sie ausführen möchten Option, um die Standard-Shell zu entfernen, und fügen Sie dann Ihren eigenen expliziten Aufruf der Shell hinzu, deren integrierte Shell Sie verwenden möchten.

watch -x bash -c 'time ls'
watch -x zsh -c 'time ls'

Unabhängig davon, wie Sie watchden Befehl ausführen , ist der Befehl, den Sie überwachen, kein untergeordnetes Element der Shell, die den watchBefehl ausgeführt hat, sodass die Einstellungen der Shell nicht direkt relevant sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.