ls -l | wc -l 새 파일로 리디렉션되면 출력이 달라집니다.

ls -l | wc -l 새 파일로 리디렉션되면 출력이 달라집니다.

"ls -l | wc -l"은 "1+no. 파일/디렉터리"(첫 번째 줄에 추가 1개)를 출력합니다.

그러나 명령을 실행하면 ls -l | wc -l > temp(출력이 새 파일 temp로 리디렉션되는 경우) 임시 파일에 저장된 값은 리디렉션 없이 출력된 값보다 1 더 큽니다. 새 "temp" 파일이 생성되었기 때문인 것 같지만 임시 파일은 ls -l 명령이 실행된 후에 생성되어야 하므로 출력은 리디렉션 없이 출력과 동일해야 합니다.

누가 좀 도와주세요

답변1

이는 완전히 정상적인 동작입니다.

무슨 일이 일어나는지는 쉘(sh, bash, csh, ksh 등)이 먼저 전체 명령줄을 읽는다는 것입니다.
그런 다음 프로세스, 파이프 및 리디렉션 파일을 구성합니다.오른쪽에서 왼쪽 순서그런 다음에만 실제 명령을 실행합니다.

따라서 ls 명령이 실행되기 전에 리디렉션 파일(temp)이 생성됩니다.
wc가 실제로 시작되기 전에 "temp"와 연관된 파일 핸들을 wc 출력의 대상으로 사용할 수 있어야 하기 때문에 그래야 합니다.
ls의 출력이 wc의 입력이 될 파일 핸들에 연결되기 전에 wc 명령을 설정해야 합니다.

처음에는 다소 비논리적으로 보이지만 쉘이 명령 시퀀스를 구성하는 방식을 이해하면 완벽하게 이해됩니다.

답변2

셸은 temp명령 실행을 시작하기 전에 실제로 파일을 생성하므로 항상 파일 temp수가 계산되는 것을 볼 수 있습니다. 계산되지 않으려면 임시 파일을 /tmp. 아니면 얻은 숫자에서 1을 빼면 됩니다.

관련 정보