Wie kann ich verhindern, dass nohup die Datei ~ / nohup.out erstellt?

16

Mit dem Befehl $ nohup ...starte ich eine Anwendung im Hintergrund, um anschließend das Terminalfenster zu schließen.

Bei der Ausführung wird die Datei erstellt ~/nohup.out.

Beispiel:

orschiro@x230:~$ nohup /bin/bash -c "sleep 15 && python3 /home/orschiro/bin/show_state.py"
nohup: ignoring input and appending output to 'nohup.out'

Wie kann ich das nohupErstellen verhindern nohup.out?

Orschiro
quelle
2
Sie könnten auch darüber nachdenken byobu. :)
Andrea Lazzarotto
Vielen Dank, @AndreaLazzarotto! Können Sie mir ein Beispiel geben, wie man es benutzt?
Orschiro
2
Nun, ich schlage vor, Sie schauen sich das Video hier an: byobu.co Grundsätzlich müssen Sie für das, was Sie tun möchten, nur noch loslegenbyobu , was Sie möchten, dann drücken F6und fertig. Sie können darauf zurückkommen, indem Sie byobuerneut ausführen .
Andrea Lazzarotto
Ausgezeichnet! Vielleicht möchten Sie dies als offizielle Antwort hinzufügen?
Orschiro
Technisch gesehen beantwortet mein Vorschlag Ihre Frage überhaupt nicht, es ist nur eine Alternative. : D
Andrea Lazzarotto

Antworten:

20

Sie können die Ausgabe an eine beliebige Stelle umleiten, zum Beispiel:

nohup /bin/bash -c "sleep 15 && python3 /home/orschiro/bin/show_state.py" >/dev/null 2>&1

Die Umleitung verhindert, dass die Standardausgabedatei nohup.outerstellt wird. /dev/nullist in Vergessenheit geraten, also wenn Sie die Daten überhaupt nicht wollen, senden Sie sie dorthin.

In bash können Sie abkürzen >/dev/null 2>&1zu&>/dev/null

Für Programme, die ich oft benutze, erstelle ich beispielsweise einen Alias ​​(und füge ihn meinem hinzu .bashrc)

alias show_state='nohup /bin/bash -c "sleep 15 && python3 /home/orschiro/bin/show_state.py" >/dev/null 2>&1'

Jetzt muss ich nur noch tippen show_state

Zanna
quelle
2
@orschiro: Nach ein paar Jahren wird es nicht mehr kryptisch sein und du wirst dich daran erinnern;) Ich schlage vor, dabei zu bleiben, weil ein Aliasing bedeutet, dass du diese Erfahrung nicht sammelst und weißt, wie BASH-Umleitungsoperatoren auf Anhieb funktionieren deines Kopfes ist eine entscheidende Fähigkeit.
Leichtigkeit Rennen mit Monica
Wäre das nicht besser als eine Funktion? So etwas wie show_state () { /bin/bash -c "$@" &>/dev/null }? (Warnung: Schlechte Syntax und funktioniert wahrscheinlich nicht! Es ist nur ein Beispiel!). Ein Trottel: Warum, show_statewenn Sie die Ausgabe von wegwerfen nohup?
Ismael Miguel
Ich weiß nicht, was das Skript @IsmaelMiguel macht, aber ich nehme an, es ist ein Indikator mit einem Tray-Symbol, nicht "state" (was auch immer es ist) auf stdout zu drucken. Sicher, eine Funktion kann durchaus mehr Spaß machen als ein Alias ​​^. ^
Zanna
Oh, ich habe es! Der Name der .pyDatei wurde leider nicht angezeigt. Und ja, eine Funktion macht mehr Spaß. Ich habe diese schlecht geschriebene Funktion auf einem Debian - Desktop: shutup() { source "$@" >/dev/null 2>&1 & }. Und es funktioniert. Vielleicht könntest du etwas Ähnliches vorschlagen, aber viel besser?
Ismael Miguel
Ich wusste nie, dass das &>funktioniert (und meiner Meinung nach sieht es aus wie Hintergrund plus stdout Umleitung). Ich habe es immer gelernt als >&. Ist es Standard?
Random832