Linux以外の場所、または/ procファイルシステムへのアクセス権がない、または同等の場合は、pstreeを使用できます。
あなたのpidを持っていると仮定して
Macの場合:
./test.sh
16012
-+= 00001 root /sbin/launchd
\-+= 00245 wingwong /sbin/launchd
\-+= 04670 wingwong /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn_0_2052597
\-+= 11816 root login -pf wingwong
\-+= 11817 wingwong -bash
\-+= 16012 wingwong ksh ./test.sh
\-+- 16013 wingwong pstree -p 16012
Linuxボックスの場合:
./test.sh
14981
bash(14981)---pstree(14982)
pstreeからの出力の形式とスタイルは環境によって異なりますが、ASCII出力を強制してからsed / tr / awk / etcを強制できます。出力をフィルタリングして、スクリプトを実行しているシェルを取得します。
したがって、クリーンアップされた出力バージョン(MacまたはLinux OSで動作します):
#!/usr/bin/env sh
pstree -p $$ | tr ' ()' '\012\012\012' | grep -i "sh$" | grep -v "$0" | tail -1
実行時の収量:
./test.sh
sh
そして、別のシェルで実行した場合:
#!/usr/bin/env ksh
pstree -p $$ | tr ' ()' '\012\012\012' | grep -i "sh$" | grep -v "$0" | tail -1
利回り:
./test.sh
ksh
ルートや特別なファイルシステムは必要ありません。フィルタリングでは、シェルバイナリ名がshで終わり、shで終わる中間エントリがないことを前提としています。また、スクリプトに「sh」という名前を付けなかったか、情報を抹消するような不幸なgrepパターンを指定しなかったと仮定します。:)高度なフールプルーフを確保するには、ご使用の環境に合わせてカスタマイズする必要があります。