나에게는 이런 명령이 있다.
#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