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?

Odpowiedzi:


56

Zawiń to w sh -c:

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &

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

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.


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 &

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.