私にはこのような命令があります。
#echo -e "ls\npwd" >test
#bash
#exec <test
このコードの後に
#ls /dev/fd
0 1 2 3
#cd /dev/fd;ls
0 1 2 255
興味深いのは、ディレクトリの/dev/fd
内容が異なることです。どうしたの?
答え1
/dev/fd
固定ディレクトリではなく、各プロセスディレクトリへのシンボリックリンクです。 2回の呼び出しでは、2つのls
異なる「ディレクトリ」の内容が一覧表示されます。
最初の出力は、関連するls
ファイル記述子を提供します。 2番目の出力は、関連するファイル記述子を提供しますbash
。echo
前述のディレクトリのリストはexec
これを変更しません。
考慮する:
foo:~$ ls -ln /dev/fd/
total 0
lrwx------ 1 1000 1000 64 Jul 10 12:13 0 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul 10 12:13 1 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul 10 12:13 2 -> /dev/pts/19
lr-x------ 1 1000 1000 64 Jul 10 12:13 3 -> /proc/20115/fd
foo:~$ cat /dev/fd/../cmdline && echo
cat/dev/fd/../cmdline
foo:~$ cd /dev/fd ; ls -ln
total 0
lrwx------ 1 1000 1000 64 Jul 8 05:01 0 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul 8 05:01 1 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul 8 05:01 2 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul 8 05:01 255 -> /dev/pts/19
foo:/dev/fd$ cat ../cmdline && echo
bash
foo:/dev/fd$ pwd -P
/proc/2689/fd