Was ist eine gute Möglichkeit, auf einer Shell zu sagen, dass dies nach 15 Minuten ausgeführt werden soll?

7

ich benutze das

sleep 900; <command>

auf meiner Schale. Ich wollte nur wissen, ob es einen alternativen / besseren Weg gibt, den Sie verwenden.

Laser
quelle
4
Sie können dies tun sleep 15m && command, wenn Sie es abbrechen möchten, können Sie ctrl-ces (Ihre Version würde den Befehl ausführen, wenn Sie ctrl-ces tun ).
OneOfOne
@OneOfOne Ich weiß nicht, ob es sich um eine Shell oder etwas anderes handelt, aber ich habe noch nie gesehen, dass Strg + C so durchgefallen ist. es bricht die gesamte Linie ab
Michael Mrozek
@ Michael Ich hätte schwören können, dass es das mit älteren Bash gemacht hat, ich habe es nur versucht und es nicht, also ignoriere meinen Kommentar
OneOfOne
1
@OneOfOne: Es hat bis zu 3.x geschlagen; Das ist in Bash 4 behoben.
Gilles 'SO - hör auf böse zu sein'

Antworten:

23

Sie suchen at( bei @ wikipedia )?

usr@srv % at now + 15 min
at> YOUR COMMAND HERE

Sie können mehrere Befehle definieren, die in 15 Minuten ausgeführt werden sollen. trenne sie mit einer Rückgabe.
Bestätigen Sie alle Befehle mit control+d.

binfalse
quelle
4

Ich verwende ein kurzes Skript, das ich auf meinem Pfad behalte und das nachher benannt ist und das enthält

at now + "$@"

Auf diese Weise können Sie beispielsweise ganz einfach Folgendes eingeben:

after 15 min

dann alle Befehle und Strg-D oder

echo COMMANDS | after 15 min

das macht das gleiche.

Dalker
quelle
4
Vielleicht möchten Sie "$@"statt $*- dann werden Argumente, die Leerzeichen enthalten, richtig zitiert werden
Glenn Jackman
Danke für den Tipp. Ich habe meine Antwort entsprechend bearbeitet. Ich denke, es ändert nichts im Kontext des at- Befehls, aber es ist definitiv eine bessere Standardpraxis.
Dalker
2
Sie müssen die Anführungszeichen verwenden: speziell "$@"nicht $@. Nur wenn zitiert, wird bash diese spezielle Erweiterung durchführen: gnu.org/software/bash/manual/bashref.html#Special-Parameters
Glenn Jackman
@glenn, entsprechend überarbeitet. Danke für den Tipp, das wusste ich nicht!
Dalker