[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:20561] Re: シェルスクリプトについて


楠根です。

In message <19980302033632J.shoushin _at_ mail2.alpha-net.or.jp>
   Subject: [linux-users:20551] Re: シェルスクリプトについて
    Shoushin Liu <shoushin _at_ mail2.alpha-net.or.jp> さん曰く:

 >> > /bin/sh 以外を processor として使いたい場合
 >> > (ってゆ〜かそうでなくても普通)は、
 >> > 
 >> >  >> 結論として、シェルスクリプトの一番始めには、
 >> >  >> #!シェルの指定
 >> >  >> を付けようということです。
 >> 
 >> これは知りませんでした。そこで、
 >> 
 >> #!/bin/tcsh
 >> set d = `date`
 >> echo "Today is $d[2-3]"
 >> 
 >> とやってみたところ、
 >> 今度は何も表示されませんでした。

/bin/tcsh はありますか?

例えば、/home/kusune/hoge に実行属性がついていて、その内容が
---------------- begin ---------------------- begin ----------------
#!/bin/sh -f
mule
----------------- end ------------------------ end -----------------
であった場合、
  $ cd /home/kusune
  $ ./hoge
とすると、kernel は
  $ /bin/sh -f ./hoge
を起動するようになっています。

で、/bin/sh -f filename とすると、filename で指定した file の中に記述
されている command を実行するので、この場合 mule が起動されるわけです。
この際、mule を C-z で一時停止し、ps をかけてみると、
---------------- begin ---------------------- begin ----------------
$ cd /home/kusune
$ ./hoge
[mule を C-z で一時停止]
$ ps x
  PID TTY STAT  TIME COMMAND
  189  p1 S    0:00 -bash 
  215  p1 T    0:00 sh -f ./hoge
  216  p1 T    0:00 mule 
  218  p1 R    0:00 ps x 
----------------- end ------------------------ end -----------------
となります。189 の bash は login shell で、215 の sh -f というのが、
kernel によって起動されなおした command です。

ここで、ちょっと実験をしてみます。
<</home/kusune/hoge2>>
---------------- begin ---------------------- begin ----------------
#!/bin/cat -n
この file は shell(?) script のてすとのために作りました。
こういうこともできるわけです。
----------------- end ------------------------ end -----------------
という内容の file を作ります。この file を実行するとどうなるでしょう?

答えは、
---------------- begin ---------------------- begin ----------------
$ cd /home/kusune
$ ./hoge2
     1	#!/bin/cat -n
     2	この file は shell(?) script のてすとのために作りました。
     3	こういうこともできるわけです。
----------------- end ------------------------ end -----------------
となります。
  $ /bin/cat -n ./hoge
としたのと同じですね。
つまり、command はいわゆる shell でなくてもなんでもいいわけです。

なお、上の例でわかるように、#! の後に書くコマンドには option を付ける
ますが、この option の数は、Linux では無制限のようですが、Solaris など
の古典的な UNIX では一つしかとることのできないものが多いようです。
<</home/kusune/hoge3>>
---------------- begin ---------------------- begin ----------------
#!echo a b c d e
----------------- end ------------------------ end -----------------
を実行すると、Linux では
  $ ./hoge3
  a b c d e ./hoge3
となりますが、Solaris では
  $ ./hoge3
  a ./hoge3
となります。
--
慶應義塾大学 環境情報学部 徳田研究室  楠根雄志
kusune _at_ sfc.wide.ad.jp, kusune _at_ sfc.keio.ac.jp

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: