今回はコマンドを束ねる
「グルーピング(grouping)」を学ぼう!
コマンドを束ねる?
どうやって使うのかな?
{ ... }
によるグルーピング
最初は
{ ... }
での
グルーピングだよ
書き方はこうだよ
{
コマンド1
コマンド2
...
}
ただまとめるだけ?動きには何か変化があるのかな?
まとめるだけだと何も変わらないけど他の機能と組み合わせて力を発揮するんだ例えばバックグラウンド実行と組み合わせてみよう
{
echo "ファイルをダウンロード中…"
sleep 10
echo "完了!"
} &
ダウンロードは
sleep
で代用しているよこのように複数のコマンドを1つのまとまりとしてバックグラウンド実行できるんだ!
便利だね!1行で書ききれなかったらグルーピングを使うよ!
もう一つよく使われるのはリダイレクトだよグループ全体の出力をまとめてリダイレクトできるんだ例えば以下は警告メッセージを標準エラー出力として表示するよ
{
echo "============"
echo "!!警告!!"
echo "============"
} >&2
全体を一括してリダイレクトできるんだね!
( ... )
によるグルーピング似たようなものに
( ... )
があるんだ書き方は以下のとおりだよ(
コマンド1
コマンド2
...
)
これもグルーピングなんだね
{ ... }
とどう違うのかな?( ... )
の中は元のシェルではなくサブシェル?わざわざ別のシェルで実行する理由がよくわからないな…
サブシェルで行った操作は元のシェルに影響を与えないんだそのことを利用してこんなことができるよ
(
cd /tmp
echo "$(pwd) ディレクトリで操作をするよ!"
)
echo "操作が終わった後、現在のディレクトリは $(pwd)"
これはサブシェルで
/tmp
へ移動してそこでコマンドを実行しているけど元のシェルはディレクトリ移動の影響を受けていないんだ/tmp ディレクトリで操作をするよ!
操作が終わった後、現在のディレクトリは /home/midori
へぇー…確かに現在のシェルのディレクトリを変えずに別ディレクトリで作業をできるのは便利かも!
今回はグルーピングを学んだよ!
{ ... }
と ( ... )
は用途が違うんだね!そのとおりだね!それぞれの特徴を意識して使い分けることが大事だよ