Câu trả lời:
BTW, vấn đề cốt lõi là các shell (có nguồn gốc từ Bourne) không cho phép các lệnh rỗng.
";" và "&" là các dấu kết thúc lệnh, nghĩa là fg và bg tương ứng. Vì thế "; ;" (hoặc ";" ở đầu dòng) cũng không hợp lệ.
(Dòng mới ngụ ý ";" nếu có lệnh chưa kết thúc, trừ khi bạn sử dụng "\" để tiếp tục dòng.)
Ngôn ngữ khác nhau rất nhiều về các chính sách này:
Ngôn ngữ có nguồn gốc C cho phép báo cáo trống.
Pascal và PERL có dấu phân cách, không phải dấu chấm dứt.
Không, nó chỉ bối rối và không thể hiểu được ý của bạn.
Bạn cần nhóm & bằng lệnh mà bạn muốn đặt trong nền:
$ (evince foo.pdf bar.pdf &); emacs foo.tex &
Điều đó làm việc tốt. Thậm chí rõ ràng hơn sẽ là:
$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)
Đặc biệt là nếu sau đó bạn muốn chuỗi nhiều lệnh hơn sau khi kết thúc.
if [ $(ps -ef |grep -c '[p]grep') -eq 0 ]; then nohup sleep 5 > /dev/null 2>&1</dev/null & fi