So führen Sie diesen einfachen Befehl im Hintergrund aus

So führen Sie diesen einfachen Befehl im Hintergrund aus

Es fällt mir wirklich schwer, den folgenden Befehl im Hintergrund auszuführen:

find /dir -iregex ".*\.\(jpg\|jpeg\)" -exec jpegoptim --strip-all {} \; -exec sleep 1 \;

nohupIch habe versucht, es am Anfang hinzuzufügen, aber ohne Erfolg. Ich habe es auch versucht &, es am Ende hinzuzufügen, aber ohne Erfolg. Haben Sie einen Vorschlag?

Antwort1

Aus dem Problem geht hervor, dass Sie die Ausgabe des Skripts schließen möchten. Versuchen Sie Folgendes:

nohup find /dir -iregex ".*\.\(jpg\|jpeg\)" -exec jpegoptim --strip-all {} \; -exec sleep 1 \; 0<&- >&- 2>&- &

Mögliche Duplikate und weitere Informationen finden Sie unterhttps://stackoverflow.com/a/10908325/9008720

Es kann praktisch sein, hierfür ein Skript zu erstellen, etwa:

#!/bin/sh
nohup "$@" 0<&- >&- 2>&- &

Nennen wir es o, damit es beim nächsten Mal einfach im Hintergrund ausgeführt o some command scriptwird .some command script

BEARBEITEN:

Ich habe kürzlich festgestellt, dass die Verwendung >&- 2>&-mit xseloder mpveinige Probleme verursacht, also >/dev/null 2>&1ist es vielleicht die bessere Wahl. Wenn >&-oder 2>&-mit einem Shell-Skript verwendet wird, das enthält xsel -ib, xsel -ibhat es keine Auswirkung, xcliphat aber dieses Problem nicht. Außerdem >&- 2>&-schließt es mpvdie Ausgabe nicht vollständig, während es die Ausgabe >/dev/null 2>&1vollständig schließt mpv. Ich bin mir nicht sicher, was der Grund für diese Probleme ist. Ich denke, vielleicht funktionieren manche Programme einfach nicht gut, wenn stdout oder stderr geschlossen sind.

verwandte Informationen