カテゴリ:

シェルスクリプトを実行するとカレントシェルではなく、新たに生成される別のシェルによって実行されます。ではこれをどのように確認できるでしょうか。

まず、現在使っているシェルのPIDを表示するには"$$"を使います。

$ ps
  PID TTY          TIME CMD
24586 pts/0    00:00:00 bash
$ echo $$
24586

シェルスクリプトで確認するために下記のプログラムを作りました。1行目で標準シェル(sh)を指定しています。実行すると sh が実行していることが分かります。

$ cat show_me_shell.sh
#!/bin/sh
ps ax | grep `echo $$`
$ ./show_me_shell.sh
24647 pts/0    S+     0:00 /bin/sh ./show_me_shell.sh

1行目の指定を csh に変更すると確かに、csh で実行されることが分かります。

$ cat show_me_shell.sh
#!/bin/csh
ps ax | grep `echo $$`
$ ./show_me_shell.sh
24655 pts/0    R+     0:00 /bin/csh ./show_me_shell.sh

1行目でシェルを指定しないと sh で実行されます。下記実行例では bash が利用されていますが、これは少なくとも Red Hat 系のディストリビューションでは sh は bash へのシンボリックリンクになっているからです。

$ cat show_me_shell.sh
ps ax | grep `echo $$`
$ ./show_me_shell.sh
24672 pts/0    R+     0:00 -bash

$ ls -l /bin/sh
lrwxrwxrwx  1 root root 4 Dec 22 11:31 /bin/sh -> bash