、すなわちワンライナー/一行に、アンパサンド(&
)とバックグラウンドで生成されたプロセスのPIDをプリントアウトしたかったしてみてください。
$ tail -f /var/log/syslog & ; echo $!
bash: syntax error near unexpected token `;'
...しかし、私はこの記事に私をもたらした恐ろしい構文エラーを取得し続けた。私は上記の私の例では実現しなかった何
は
、&
(アンパサンド)もbash
のコマンドセパレータ/ターミネータであるということです - ちょうど;
(セミコロン)などがある!!注:
BashSheet - Greg's Wiki
- [コマンド]。 [コマンド] [改行]
セミコロンと改行は、互いに同期コマンドを分離します。
- [コマンド] & [コマンド]
単一のアンパサンドは、非同期コマンドを終了します。
だから - 与えられたコマンドラインターミネータもある上記;
続いて私の例では、bash
でコマンドラインターミネータで&
、 - bash
チョークは。
$ tail -f /var/log/syslog & echo $!
[1] 15562
15562
$ May 1 05:39:16 mypc avahi-autoipd(eth0)[23315]: Got SIGTERM, quitting.
May 1 06:09:01 mypc CRON[2496]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete)
May 1 06:17:01 mypc CRON[5077]: (root) CMD ( cd/&& run-parts --report /etc/cron.hourly)
May 1 06:25:01 mypc CRON[7587]: (root) CMD (test -x /usr/sbin/anacron || (cd/&& run-parts --report /etc/cron.daily))
^C
$ May 1 06:52:01 mypc CRON[15934]: (root) CMD (test -x /usr/sbin/anacron || (cd/&& run-parts --report /etc/cron.monthly))
$ ps -p 15562
PID TTY TIME CMD
15562 pts/0 00:00:00 tail
$ kill 15562
$ ps -p 15562
PID TTY TIME CMD
[1]+ Terminated tail -f /var/log/syslog
$ ps -p 15562
PID TTY TIME CMD
$
...しかし、この例では、手動で殺さなければならない:答えはワンライナーでコマンドラインセパレータとしてのみアンパサンド&
行為をセミコロン;
を削除し、できるようにするだけです産んだプロセス。バックOPの問題に行き
は、私は、このコマンドラインで問題を再構築することができます
$ tail -f /var/log/syslog & pid=$! { sleep 2; kill $pid; }
bash: syntax error near unexpected token `}'
この考える - bashは、セパレータとして&
を見て、そしてその後、「法的」コマンドpid=$!
、見て - と以前の "合法"コマンドは、末尾にと表示され、中括弧{
は現在のシェルで新しいコマンドグループを意味します。だから、答えはセミコロン;
でpid=$!
を終了させるだけであるので、新しいコマンドグループが正常に起動することができます。
$ tail -f /var/log/syslog & pid=$! ; { sleep 2; kill $pid; }
[1] 20228
May 1 05:39:16 mypc avahi-autoipd(eth0)[23315]: Got SIGTERM, quitting.
May 1 06:09:01 mypc CRON[2496]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete)
May 1 06:17:01 mypc CRON[5077]: (root) CMD ( cd/&& run-parts --report /etc/cron.hourly)
May 1 06:25:01 mypc CRON[7587]: (root) CMD (test -x /usr/sbin/anacron || (cd/&& run-parts --report /etc/cron.daily))
May 1 06:52:01 mypc CRON[15934]: (root) CMD (test -x /usr/sbin/anacron || (cd/&& run-parts --report /etc/cron.monthly))
$ ps -p 20228
PID TTY TIME CMD
[1]+ Terminated tail -f /var/log/syslog
$
注意をtail -f
プロセスは、プロパティを終了しているようだということが、私のbash
(バージョン4.2.8(で1))、「[1]+ Terminated ...
」というメッセージが表示されたら、シェルでEnterキーを押す必要があります。
希望すると、
乾杯!
「su」を除いた '-c'引数のすべてを実行できますか?あなたのサブシェルが中括弧の代わりに '(sleep 20; kill $ pid;)'のようにかっこを使うように見えます。 –
いいえ、私はかっこで試しました。同じエラーです。 – Johnbritto
なぜ 'tail'を使うのですか? 'RUN_Server.sh | RUN_Server.sh 'だけに意味があるようです。ティーサーバー。ログ '。 – FatalError