今使用中のシェルを調べる方法。 ログインシェルではなく、そのスクリプトを実行するときに使われてるシェルを知りたい。
とりあえず、シェバングにdash書いたら dashと表示させたい。
$SHELLを使う
SHELLはログインシェルなので、今使われているシェルを表示することはできない。
#!/bin/dash echo $SHELL
dashと表示させたい
$ ./s.sh /bin/bash
ログインシェルが表示される
# su - list -c ./s.sh No directory, logging in with HOME=/ /bin/sh
ログインシェルが表示される
getpwuid()を使う
Man page of GETPWNAM
/etc/passwdを見てるだけっぽいので無意味
$SHLVLを使う
@IT:シェルの深さを調べるには
深さがわかってもしょうがないけど、なんとdashだとこれすら増えることはない
/proc/$$/exe を読む
http://search.luky.org/fol.2000/msg02750.html
これだ!
#!/bin/dash readlink /proc/$$/exe
想定した通りに表示される
$ ./s.sh /bin/dash $ dash ./s.sh /bin/dash $ bash ./s.sh /bin/bash $ sh ./s.sh /bin/dash