揮発性のメモ2

http://d.hatena.ne.jp/iww/

現在使っているシェルの名前を知る方法

今使用中のシェルを調べる方法。 ログインシェルではなく、そのスクリプトを実行するときに使われてるシェルを知りたい。
とりあえず、シェバングに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

ログインシェルが表示される

$0を使う

Linux/Web/Android/iOS: 現在使用中のShell

$ echo $0
-bash

$ dash
$ echo $0
dash

今使っているシェルをコマンドラインから知るときにはこれ。
しかし当然スクリプトの中からは使えない。

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