Bash:スクリプトをインポートするときにスクリプトを読む方法

Bash:スクリプトをインポートするときにスクリプトを読む方法

Bashがスクリプトを実行すると、ls -la /proc/<pid of bash>/fd「255 -> /path/to/script」と表示されます。私はbashがファイル記述子255を介してスクリプトを読み込み、コマンドを1行ずつ実行すると思います。

しかし、bashがスクリプトを受け取ったとき、私はls -la /proc/<pid of bash>/fdそれを見つけることができませんcat /proc/<pid of bash>/maps

質問があります。 bashがスクリプトを受け取ったら、bashはスクリプトをどのように読みますか?スクリプトファイルを読み取る特別な方法はありますか?

答え1

ふと状況を分析してみたい考えが浮かんだstrace

初めて実行すると、出力はstrace -f -p <pid>次のようになります。

openat(AT_FDCWD, "./test", O_RDONLY) = 3

...

[pid 3408] dup2(3, 255) = 255

[pid 3408] 閉じる(3) = 0

「test」は実行するシェルスクリプトです。 「3408」はサブシェルのpidです。 「test」はファイル記述子3で開き、ファイル記述子255にコピーされる。したがって、ls -la /proc/<pid of bash>/fd「255 -> /some/directory/test」と表示されます。

ただし、スクリプトをインポートすると、「test」が開き、バッファに読み込まれ、すぐに閉じます。したがって、ls -la /proc/<pid of bash>/fd上記の項目は表示されません。

bashがなぜこのように実装するのかわかりません。

関連情報