Jak wykonać wiele poleceń za pomocą nohup

41

Muszę wykonać wiele poleceń za pomocą nohup. Każde polecenie powinno zostać wykonane po poprzednim poleceniu.

Użyłem tego polecenia jako przykładu:

nohup wget $url && wget $url2 > /dev/null 2>&1 &

Jednak to polecenie nie działało.

Jakiego polecenia powinienem użyć w tym celu?

Ehsan
źródło

Odpowiedzi:

56

Zawiń to w sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &
jw013
źródło
1
kiedy uruchamiam nohup, pojawia się komunikat „nohup: ignorowanie danych wejściowych i przekierowywanie stderr na stdout”, więc czy „2> i 1” nie są zbędne?
harschware
1
Prawdopodobnie. Myślę, że kiedy napisałem odpowiedź, po prostu skopiowałem ją z pytania.
jw013
6

Czy nie byłoby o wiele łatwiej stworzyć listę poleceń w osobnym pliku powłoki, np. Command.sh, bez żadnych przeszkód?

Następnie dzwonisz:

nohup bash command.sh
assaf
źródło
4

Inni już odpowiedzieli na temat nohup. Jako praktyczny marginesie: polecam robić tego typu rzeczy W ciągu screenlub tmuxsesji. W ten sposób możesz rozłączyć, a następnie połączyć ponownie później i zobaczyć wynik i wynik końcowy.

Przestań krzywdzić Monikę
źródło
1
Ta odpowiedź jest świetna do scenariuszy interaktywnych, ale nie ma sensu w przypadku skryptów ani automatyzacji.
Jonathan Hartley,
0

Byłoby to prostsze:

nohup sh -c "wget $url && wget $url2" > /dev/null 2>&1 &

Może to jednak powodować problemy, jeśli adresy URL zawierają znaki specjalne, więc dla bezpieczniejszej opcji możesz użyć:

nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &
Didi Kohen
źródło
3
Jedynym bezpiecznym sposobem na przekazywanie parametrów do sh -codbywa się za pomocą odrębnych argumentów, które mogą być dostępne za pośrednictwem parametrów pozycyjnych ( $0, $1...). Nie ma łatwego ani prostego sposobu poprawnego cytowania argumentów do parsowania łańcucha. Próba użycia podwójnych cytatów ze znakiem ucieczki kończy $urlsię niepowodzeniem, jeśli sama zawiera podwójne cudzysłowy. Spróbuj a='problem"'; sh -c "echo \"$a\""sam i przekonaj się - powinien pojawić się błąd składni, ponieważ sh -cpróbuje się uruchomić echo "problem"".
jw013,
@ jw013 Czy to nie dotyczy, czy sprzeciw dotyczy w równym stopniu przyjętej odpowiedzi przez -oh. Przez Ciebie. Prawdopodobnie nie. Ale nie rozumiem, dlaczego nie! :-)
Jonathan Hartley,
1
@JonathanHartley Nie jestem pewien, czy rozumiem twoje pytanie. Jeśli porównać to odpowiedź na moje starannie należy zauważyć różnicę w sposobie $urli $url2są stosowane.
jw013
@ jw013 Ah, oczywiście. Byłem głupi. Dziękuję za wyprostowanie mnie.
Jonathan Hartley