シェルワンライナー160本ノック問題113
問題113 カレントディレクトリの調査
問題のファイルは
https://github.com/shellgei/shellgei160
からダウンロードできる。
シェルスクリプトの中でランダムにカレントディレクトリを移動する処理のあとsleepがバックグラウンドで行われたとき、結局sleepがどこのディレクトリで行われたのかを特定する問題だった。プロンプトの左側を見ればわかる話じゃないかと思ったがよくよく考えたらシェルスクリプトはサブシェルを生成してその中で処理を行うわけで、それだと自分の端末からはどこへ行ったのか見えるわけがなかった。
問題のシェルスクリプトを実行すると、最後に直前にバックグラウンドで実行されたコマンドのプロセスIDを出力するのでそれを手掛かりにカレントディレクトリを特定する。/proc以下にはプロセスIDに対応したディレクトリがあり、そのさらに下にはcwdというファイルがある。このファイルがカレントディレクトリへのシンボリックリンクになっているのでls-lで詳細を見ればどこで実行されたのかがわかる。
結局解答例は
ls -l /proc/(プロセスID)/cwd
となる。