Otrzymałem błąd:
bash: błąd składni w pobliżu nieoczekiwanego tokena `; '
z powodu następującego polecenia:
evince foo.pdf bar.pdf &; emacs foo.tex &
Czy rozdzielanie poleceń ;
przy użyciu &
do tła zadania jest nielegalne ? A może jest inny powód, dla którego to nie działało?
Dziękuję Ci.
if [ $(ps -ef |grep -c '[p]grep') -eq 0 ]; then nohup sleep 5 > /dev/null 2>&1</dev/null & fi
BTW, podstawowy problem polega na tym, że (pochodne Bourne'a) powłoki nie pozwalają na puste polecenia.
„;” a „&” to terminatory poleceń, oznaczające odpowiednio fg i bg. Więc "; ;" (lub „;” na początku wiersza) jest również niepoprawny.
(Nowe wiersze oznaczają „;”, jeśli istnieje polecenie, które nie zostało jeszcze zakończone, chyba że użyjesz „\”, aby kontynuować linię.)
Języki różnią się znacznie w tych zasadach:
Języki pochodne C pozwalają na stosowanie pustych instrukcji.
Pascal i PERL mają separatory, a nie terminatory.
źródło
Nie, to jest po prostu zdezorientowane i nie może zrozumieć, co masz na myśli.
Musisz zgrupować & z poleceniem, które chcesz umieścić w tle:
To działa dobrze. Jeszcze bardziej wyraźne byłoby:
Zwłaszcza, jeśli po tym chcesz również połączyć więcej poleceń.
źródło