14
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

シェルスクリプト サブシェル

Last updated at Posted at 2019-11-27
サブシェルを動かしてみる

シェル変数を局所的に使用したい場合など、元のシェルの状態に影響を与えないで何らかの処理を行いたい場合、その部分のリストを () で囲むことで、サブシェルを実行させることができる。

sub-shell-example1.sh
SH="Main"
echo "$SH"
(
  SH="Sub"
  echo "$SH"
)
echo "$SH"

上記のスクリプトを実行させた場合、同じ変数SHを使用しているが、元のシェル変数は変更されない。

sub-shell-result1
$ ./sub_shell-example1.sh 
Main
Sub
Main
サブシェルのプロセス
sub-shell-example2.sh
echo "Main"
(
  while : ;do
    echo "Sub"
  done
)

2つのプロセスで動いていることが分かる。

sub-shell-result2
$ ps aux | grep sub-shell
blueskyarea  27800  0.0  0.0  13312  3132 pts/3    S+   18:54   0:00 /bin/bash ./sub-shell-example2.sh
blueskyarea  27801 94.2  0.0  13312   260 pts/3    R+   18:54   0:25 /bin/bash ./sub-shell-example2.sh
グループコマンドとの違い

サブシェルは、グループコマンドと似ているが、グループコマンドは同じシェル内で動作する。

sub-shell-example3
SH="Main"
echo "$SH"
{
  SH="Sub"
  echo "$SH"
}
echo "$SH"

グループコマンドは同じシェルのプロセス上で動いているため、最初に定義したシェル変数が書き換わっている。

sub-shell-result3
$ ./sub_shell3.sh 
Main
Sub
Sub
サブシェルの出力をリダイレクト
sub-shell-example4.sh
(
  cd
  pwd
  ls -l
) > sub_output

リダイレクト先のファイル(sub_output)の中身

sub-shell-result4
/home/blueskyarea
total 1516
drwx------ 2 blueskyarea blueskyarea   4096 Aug  2 07:13 Desktop
drwxr-xr-x 2 blueskyarea blueskyarea   4096 Aug  2 07:13 Documents
drwxr-xr-x 4 blueskyarea blueskyarea   4096 Oct 25 17:59 Downloads
14
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?