Jak mogę zapobiec tworzeniu pliku ~ / nohup.out przez nohup?

16

Korzystam z polecenia, $ nohup ...aby uruchomić aplikację w tle, aby móc później zamknąć okno terminala.

Po wykonaniu tworzy plik ~/nohup.out.

Przykład:

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

Jak mogę zapobiec nohuptworzeniu nohup.out?

orschiro
źródło
2
Możesz również rozważyć byobu. :)
Andrea Lazzarotto
Dziękuję, @AndreaLazzarotto! Czy możesz podać mi przykład, jak go używać?
orschiro
2
Cóż, proponuję rzucić okiem na wideo tutaj: byobu.co Zasadniczo, po prostu biegnij byobu, zacznij, co chcesz, a następnie naciśnij F6i gotowe. Możesz do niego wrócić, uruchamiając byobuponownie.
Andrea Lazzarotto
Doskonały! Może chcesz dodać to jako oficjalną odpowiedź?
orschiro
Technicznie moja sugestia w ogóle nie odpowiada na twoje pytanie, jest to tylko alternatywa. : D
Andrea Lazzarotto,

Odpowiedzi:

20

Możesz przekierować dane wyjściowe w dowolnym miejscu, na przykład:

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

przekierowanie uniemożliwia utworzenie domyślnego pliku wyjściowego nohup.out. /dev/nulljest zapomnieniem, więc jeśli nie chcesz danych, wyślij je tam.

W bashu można skrócić >/dev/null 2>&1do&>/dev/null

W przypadku programów, których często używam, tworzę na przykład alias (i dodaje go do mojego .bashrc)

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

Teraz muszę tylko wpisać show_state

Zanna
źródło
2
@orschiro: Po kilku latach nie będzie to zagadkowe i zapamiętasz;) Sugeruję pozostanie przy nim, ponieważ usunięcie go oznacza, że ​​nie zdobędziesz tego doświadczenia i wiedząc, jak operatorzy przekierowywania BASH działają na najwyższym poziomie twojej głowy jest kluczową umiejętnością.
Lekkość ściga się z Moniką
Czy nie byłoby lepiej jako funkcja? Coś takiego show_state () { /bin/bash -c "$@" &>/dev/null }? (Ostrzeżenie: zła składnia i prawdopodobnie nie będzie działać! To tylko przykład!). Jeden nitpick: dlaczego, show_statekiedy wyrzucasz wyjście nohup?
Ismael Miguel
Nie wiem, co robi skrypt @ IsmaelMiguel, ale zakładam, że jest to wskaźnik z ikoną zasobnika, aby nie drukować „stanu” (cokolwiek to jest) na standardowe wyjście. Jasne, funkcja może być bardziej zabawna niż alias ^. ^
Zanna
Och, rozumiem Przepraszamy, nie widziałem nazwy .pypliku. I tak, funkcja jest przyjemniejsza. Mam to źle napisane funkcji na pulpicie Debian: shutup() { source "$@" >/dev/null 2>&1 & }. I to działa. Może mógłbyś zaproponować coś podobnego, ale o wiele lepszego?
Ismael Miguel
Nigdy nie wiedziałem, że to &>działa (i moim zdaniem wygląda to na tło plus standardowe przekierowanie). Zawsze nauczyłem się tego jako >&. Czy to standard?
Random832,