2013-08-22 2 views
0

, 그 이름은 "은 File2.txt"입니다, 하나의 파일 만 존재, 나는이 같은 쉘 스크립트를 실행합니다Linux 셸에서 명령 실행과 관련된 I/O 리디렉션은 언제 발생합니까? 내 바탕 화면에서

$ find . -name "*.txt" > file2.txt 

그 후, 나는이 같은 다른 쉘 스크립트를 실행

$ cat file2.txt 

그것의 출력은 다음과 같습니다

./file1.txt 
./file2.txt 

그래서 find 명령의 실행 파일 "file2.txt"의 CREAT 뒤에있는 것을 보이는, AM I 권리?

+0

첫 번째 명령의 출력은'file2.txt'로 지정되었습니다. 그 결과는'file1.txt' 이었으므로 모두 정확합니다. 리눅스에서'>'에 대해 읽을 필요가 있다고 생각합니다. (즉, 스트림 리디렉션) –

답변

3

정확합니다. find 명령이 실행되기 전에 I/O 리디렉션이 수행되므로 find 명령이 실행 중일 때 file2.txt 파일이 이미 존재하지만 비어 있습니다. 따라서 find 명령의 출력에는 file2.txt이 포함됩니다.

생각해 보면 이해할 수 있습니다. find이 실행되기 전에 리디렉션을 완료해야합니다. 처음에는 터미널에 쓰고 파일을 보지 못하게 할 수 있습니다.

+1

그리고 어떤 이유로 리디렉션이 실패하면 명령이 전혀 실행되지 않습니다. – twalberg

2

맞습니다 : 쉘 open이 먼저 출력 파일을 생성합니다. 그런 다음 fork이라는 하위 프로세스를 만듭니다. 그런 다음 쉘은 파일을 닫고 하위가 리턴 될 때까지 대기합니다. 하위 프로세스는 dup 또는 dup2을 호출하여 파일 설명자 1로 출력 파일을 열고 그 다음에 만 exec 패밀리의 기능 중 하나와 함께 명령을 실행합니다.

관련 문제