単一のコマンドを使用して複数のプロセスを起動するには?

単一のコマンドを使用して複数のプロセスを起動するには?

私はpianobarプレーヤーを使用します。しかし、始める前にtorとを実行する必要がありますpolipo。どちらも連続しています(中断されるまで実行)。基本的に私が探しているのは、(出力を必要とせずに)作成して処理し、フォアグラウンドtorでピアノバーを開く単一のコマンドです。polipo

編集:結果のtor開始に数秒かかるため、提案されたソリューションは最初は機能しません。もしかしたら同じ問題があった方はいらっしゃると思います。

function piano {
    tor &
    polipo &
    sleep 3
    pianobar &&
    killall tor
    killall polipo
}

ベストアンサー1

これがシェルスクリプトの目的です;複数のコマンドを実行するには、1つのコマンドを入力するだけです。以下は、あなたが探しているタスクを実行すると思われる短いスクリプトです。

#!/bin/sh

tor    & tor_pid=$!
polipo & polipo_pid=$!

sleep 5
pianobar

kill $tor_pid
kill $polipo_pid

ファイルに入れてを$HOME/local/bin/startpiano使用して実行可能にし、変数の末尾にchmod +x $HOME/local/bin/startpiano追加します。$HOME/local/binPATH

これはシェル関数の目的でもあります。;論理的に区別されるタスクを実行します。次のシェル関数を作成できます。

startpiano () {
  tor    & tor_pid=$!
  polipo & polipo_pid=$!

  sleep 5
  pianobar

  kill $tor_pid
  kill $polipo_pid
}

これは特定のシェルの起動ファイルの1つに移動されます。

編集する:編集された質問の場合、操作は複雑すぎるため、エイリアスを使用しないことをお勧めします。しかし、別名の原文はそのままにします。

これは別名の目的でもあります。;繰り返し入力したくない単純な操作を行います。エイリアスを設定する方法は次のとおりです。

alias startpiano="polipo &; tor &; pianobar"

これはシェルの初期化スクリプトの1つにも表示されます。

これら3つの解決策のいずれかを使用すると、次のように入力できます。

$ startpiano

必要なプログラムを始めてください。

  • シェル関数とエイリアスと比較してシェルスクリプトの利点は、シェル初期化ファイルに重みを追加しないことです(その場所を変数の末尾に追加することを除く PATH)。

  • シェル関数には、エイリアスと比較して後でコマンドライン引数を追加することができ(スクリプトでも機能します)、読み取ることができるという利点があります(そして多くの点で独自の「スクリプト」のように動作します)。

  • エイリアスは機能しますが、実際にエイリアスの唯一の用途は、コマンドラインフラグなどの非常に単純なものを指先でより便利な短いものに置き換えることですlsalias ls="ls -F"これが私が持っている唯一のエイリアスです)。

おすすめ記事