「シェルスクリプトを起動したときのコマンド文字列そのもの」をシェルスクリプト内で取得する方法
ログ取るときとかで必要になった。
シェルスクリプトを実行したときに、
スクリプト内で「当該シェルスクリプトを起動したときのコマンド文字列そのもの」を取得したいとき。
例えばシェルスクリプトを実行して、
$sh hoge.sh
↑実行後、スクリプト内で"sh hoge.sh"を取得したい。
$0とかだと"hoge.sh"しか取れないからダメ!
できた①
#!/bin/bash sed -e 's/\x0/ /g' /proc/$$/cmdline #結果 $sh hoge.sh sh hoge.sh
/proc/(プロセスID)/cmdlineから取得できるとのこと。
※パラメータはヌル文字区切りなので注意
できた②
#!/bin/bash ps -p $$ --no-headers -o "%a" #結果 $sh hoge.sh sh hoge.sh
$$は「bashの特殊パラメータ」で「シェルスクリプトのプロセスID」を取るもの。
これをpsでPID指定して、さらにargsだけ出力させる、とのこと。φ(・・
(シェルスクリプトってただのコマンドの羅列だから、自身で実行したコマンドなんてとれないのかなー?historyコマンドをうまいことして抽出するしかないのかなー?)って思ってけど、
ちゃんとできる方法があるんだね・・・すごい!