zshを使用して次のコマンドをタップして完了しようとすると、ls /proc/self/fd/
次のようになります。
files
0@ 1@ 10@ 11@ 12@ 13 2@ 3
ただし、Enter(完了しない)を押すと、次のようになります。
> ls /proc/self/fd/
0 1 2 3
現在のシェルのファイル記述子をリストすると、他の結果が表示されます。
> ls /proc/$$/fd/
0 1 10 2
これらの3つの結果が異なる理由は何ですか?
答え1
ls /proc/self/fd
プロセス用に開いているファイル記述子を表示することから始めますls
。これはls
、読み取っているディレクトリの3つの標準入力、出力、およびエラー記述子です。
ls /proc/$$/fd
ls
実行時にシェルでまだ開いているファイル記述子(3つの標準記述子とzsh
端末ファイル記述子のコピー)を表示します(10)。
タブ補完にはls /proc/self/fd/
開いたファイル記述子が表示されます。その瞬間殻のために。表示された内容に加えて、ls /proc/$$/fd
これには、完了自体のために開かれたファイル記述子(/usr/share/zsh/.../functions
完了を実装するファイルのため)も含まれます。