決して終わらないコマンドをいくつか実行しようとしています。これらのコマンドはディレクトリを監視し、変更があったときにファイルを更新します。アイデアとしては、異なるツールで監視する複数のフォルダーが必要で、それらすべてを 1 つのコマンドから実行できるということです。
期待どおりに返される通常のコマンドの場合は、コマンドを で区切るとうまくいきます;
。
ls /;
cd /;
ls var;
cd var;
ls log;
cd log
tail -f <some_file>
戻り値のないコマンド (またはなど) を連鎖させようとするとcoffee -c -w <some_coffeescript_folder>
、最初のコマンドだけが実行されます。
これを 1 つのコマンドで実行する方法はありますか? 以下に、リンクしようとしているコマンドを示します。
coffee -c -m -w public/javascript/*.coffee; \
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/; \
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/;
答え1
コマンドにアンパサンドを追加することで、バックグラウンドで実行できます。
coffee -c -m -w public/javascript/*.coffee &
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/ &
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/ &
現在バックグラウンドで実行されているすべてのジョブを表示するには、次の操作を実行します。
jobs -l
バックグラウンド ジョブをフォアグラウンドに戻すには、fg を使用します (PID はオプションです)。
fg <PID>
フォアグラウンド ジョブ (シェルを「ブロック」する) をバックグラウンド モードに戻すには、Ctrl-Z / bg を使用します。
$ tail -f foobar.log # is "blocking" your shell
(hit Ctrl-Z)
$ bg
ジョブはシェルにバインドされており、自動的にフォークされないと思います。つまり、SSH 経由でログインして切断すると、シェルは SIGHUP を受信し、それがジョブにも送信されます。これにより、コマンドが停止/終了します。
ログアウトした後もジョブを実行し続けたい場合は、bash 組み込みの「disown」を調べてください。
jobs # fetch job ID in the squre brackets
disown -h %<JOBID> # disown job by using the job ID
別のオプションは「nohup」(コマンド、bash 組み込みではない)です。または、「screen」や「tmux」などの端末マルチプレクサを使用します。
答え2
これを試して:
coffee -c -m -w public/javascript/*.coffee &
stylus views/stylesheets/*.styl -w -m --out public/stylesheets/ &
stylus views/stylesheets/lib/*.styl -w -m --out public/stylesheets/lib/ &