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 を作ってマウントしたらいいんだろうけど、面倒だしね