それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

いま、どのshellを使っているのかを確認する。

bash4.x にはglobstarがあって

ls **/*.php

とか、findなしで、再帰的にファイルをGlobすることが出来る。しかし、globstarが動かなかったので、あれれと思って調べていた。

bash 4.x を使っているのかを確認ようとした。

わたしのターミナル環境には、bash複数入っていて、どのbashでシェルをつかっているのか、パッと確認しようとしたら、ちょっとハマったのでメモ

バージョン確認するなら、シェル変数を見る

takuya@rena:~/Desktop$ set | grep -ie ^[a-Z]*=
BAASH=/bin/bash
COLUMNS=120
DIRSTACK=()
(略)
LINES=40
LOGNAME=takuya
SHELL=/bin/bash

ただし、SHELL変数は、/etc/passwdのシェルせっていなので、ログイン後にzsh や ローカル bashをバンバン起動してたらあてにならない

zsh起動中でもshell変数はもちろんそのまま

takuya@rena:~/Desktop$ zsh
rena% echo $SHELL
/bin/bash
rena%

なので、 次のやりかたでは、今起動しているbashのバージョンを知ることが出来ない

echo $($SHELL --version)

ps で確認が一番楽

ps に現在実行中のプロセスID 変数 $$ を渡すのが一番楽だった。

takuya@rena:~/Desktop$ ps $$
  PID   TT  STAT      TIME COMMAND
25513 s000  S      0:00.24 /usr/local/bin/bash

ほかのシェルを起動していてもだいたい分かる

zsh, sh , tsch とかでも同じ。

takuya@rena:~/Desktop$ /bin/sh
sh-3.2$ ps $$
  PID   TT  STAT      TIME COMMAND
26251 s000  S      0:00.01 /bin/sh
sh-3.2$ exit
takuya@rena:~/Desktop$ /bin/zsh
rena% ps $$
  PID   TT  STAT      TIME COMMAND
26278 s000  S      0:00.03 /bin/zsh
rena%
takuya@rena:~/Desktop$ /bin/tcsh
Unknown colorls variable `mh'.
takuya@rena:~/Desktop$ LS_COLORS=
takuya@rena:~/Desktop$ /bin/tcsh
[rena:~/Desktop] takuya% ps $$
  PID   TT  STAT      TIME COMMAND
26343 s000  S      0:00.01 -bin/tcsh
[rena:~/Desktop] takuya%

フルパスで取得したいときは procをみる方法もある。

takuya@atom:~$ ls -l  /proc/$$/exe
lrwxrwxrwx 1 takuya takuya 0  1月 15 04:19 /proc/28653/exe -> /bin/bash

ただし、Mac OSXには /proc がない。すなわち、procfsがないので、psしか選ぶことが出来ない。MacFuseをつかってprocfs を作ってマウントしたらいいんだろうけど、面倒だしね

参考資料

http://www.ksknet.net/cat24/set.html