2016-07-22 14 views
0

開発サーバー(gulp serve)を起動するコマンドを実行するシェルスクリプト(Mac OSX Termninalで使用するため)を作成しようとしています。サーバーが連続して動作しているので、サーバーを停止せずに同じウィンドウに次のコマンドを入力することはできません(Control + C)。私の質問は、バックグラウンドでプロセスを実行したり、/またはすべての出力を抑止する方法があるかどうかです。私の目標は、プロセスを終了させる 'stop server'コマンドを書くことです(これはやり方もわかりません)。私はアンパサンドと&>/dev/nullを使用してすべての組み合わせを試しましたが、何もうまく動作しません。ここで私がこれまで持っているものです。どのようにバックグラウンドでシェルコマンドを実行し、すべての出力を抑制しますか?

if [ "$1" = "server" ] 
then 
    if [ "$2" = "on" ] 
    then 
    cd/& gulp serve --gulpfile /server/example/gulpfile.js # the output is still shown 
    printf "\033[0;32mserver is online.\033[0m\n" 
    else 
    killall tail &>/dev/null 2>&1 # this doesn't kill the process 
    printf "\033[0;32mportals is offline.\033[0m\n" 
    fi 
fi 

答えて

2

を殺すために

。代わりにお試しください:

第2に、あなたが言っていないので、あなたのkillコマンドはあなたのプロセスを殺しません。すべてのtailプロセスを強制終了するよう求めています。代わりに必要なもの:

killall gulp 

これらの変更は、目標への最も直接的な経路である必要があります。しかし、知っておくと便利なことがいくつか追加されています。

プロセス管理は、* nixの世界では長い歴史を持っています。そのため、これを長時間簡単にするためのツールを開発してきました。あなたは自分でそれらを再発明することができます(次のステップは、あなたがそれを殺すことだけを保証することができるように、あなたのギャルププロセスのPIDを保存することです)、または名前に "gulp"方法とシステム監視ファイルを書く。 Linuxの場合、これはSysV、Upstart、またはsystemdです。 OS Xと同等のものが何であるか分かりません。

しかし、実際には本番ウェブサイトではなく、開発目的でこれをやっているだけなので、実際には必要ありません。実際の目標は、gulpが実行されている間にアドホックシェルコマンドを実行できるようにすることです。ターミナルタブを使用してこれを行うか、iTermの分割機能(より具体的にはscreenまたはtmux)をより使いやすくすることができます。特にTmuxは、端末で多くの作業をしているときに便利なツールであり、慣れ親しむためには便利なツールです。

+0

これはトリックでした、答えと詳細な説明に感謝! @Diego Torres Milanoにも感謝します! – robmarston

1

まず、あなたが最後にバックグラウンドで実行するように&&(と)と&が必要cd後背景

cd/&& gulp serve --gulpfile /server/example/gulpfile.js > /tmp/gulp.log & 

でプロセスを実行します。あなたはとてもgulpは陽気にあなたの端末にテキストを分割していきます、ないgulpkillall上の出力のリダイレクトをやっているすべてのgulpプロセス

killall gulp 
+1

* all *出力を抑制したい場合は、 'stderr'もリダイレクトする必要があります。何かが好きです: 'gulp server --parms ......> /tmp/gulp.log 2>&1&'。それはハンドル2( 'stderror')をハンドル1(' stdout')と同じ場所にリダイレクトします。ここで注文は重要なので、1後に行う必要があります。 – gilez

関連する問題