我有这样的命令。
#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
不是固定目录,而是指向每个进程的目录的符号链接。在两次调用中ls
,您列出了两个不同“目录”的内容。
您的第一个输出给出了与ls
.第二个输出给出与 关联的文件描述符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