
次のエラーが発生しました:
bash: 予期しないトークン `;' の近くに構文エラーがあります
次のコマンドにより:
evince foo.pdf bar.pdf &; emacs foo.tex &
;
ジョブをバックグラウンドで実行するときに、コマンドを区切るのは違法ですか&
? それとも、これが機能しない別の理由があるのでしょうか?
ありがとう。
答え1
セミコロンは必要ありません。バックグラウンドに送信された後は、別のコマンドを自由に取得できます。
evince foo.pdf bar.pdf & emacs foo.tex &
答え2
ちなみに、根本的な問題は、(Bourne 由来の)シェルが空のコマンドを許可しないことです。
「;」と「&」はコマンド終了文字で、それぞれ fg と bg を意味します。したがって、「; ;」(または行の先頭の「;」) も無効です。
(まだ終了していないコマンドがある場合、行を継続するために「\」を使用しない限り、改行は「;」を意味します。)
これらのポリシーについては言語によって大きく異なります。
C 派生言語では空の文が許可されます。
Pascal と PERL には、ターミネータではなくセパレータがあります。
答え3
いいえ、ただ混乱していて、何を意味しているのかよく分からないだけです。
バックグラウンドで実行するコマンドと & をグループ化する必要があります。
$ (evince foo.pdf bar.pdf &); emacs foo.tex &
それはうまくいきます。さらに明確に言えば、次のようになります。
$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)
特に、終了後にさらにコマンドを連鎖させたい場合には便利です。