쉘은 cat
명령 행 에서 명령을 실행하기 전에 경로 재 지정을 찾습니다.
두 가지 리디렉션이 있습니다.
>file1
그러면 명령의 표준 출력이로 이동합니다 file1
.
<file2
그러면 명령의 표준 입력이에서 시작됩니다 file2
.
이러한 경로 재 지정이 명령 행의 이상한 위치에 있다는 사실은 중요하지 않습니다.
$ cat <file2 >file1
와 같다
$ <file2 cat >file1
이것은 같은
$ <file2 >file1 cat
등 ¹
cat
이러한 모든 인스턴스 의 유틸리티는 명령 줄 인수없이 실행 됩니다 . 경로 재 지정은 cat
명령 에 대한 피연산자가 아니며, 명령의 안팎으로 경로 재 지정을 설정하기위한 쉘에 대한 명령입니다 (표준 입력 및 출력을 파일에 연결). 쉘 은 명령을 호출 하기 전에 경로 재 지정을 설정합니다 .
cat file
와 cat <file
(또는,한다면 <file cat
) cat
유틸리티 의 차이점 은 첫 번째 경우 유틸리티 자체가 파일을 여는 중이라는 것입니다. 이 파일은 명령 줄에 피연산자로 주어 읽기위한 반면 두 번째 경우에는 쉘 이 파일을 열고 cat
입력 스트림을 연결하십시오 ². 두 번째 경우 cat
에는 파일 피연산자가 제공되지 않았으며 표준 입력에서 읽기로 자동 전환됩니다. 이것은 cat
모든 유틸리티 가하는 기능이 아닌의 기능 및 기타 유틸리티의 기능입니다 .
cat
operand가 주어지면 표준 입력에서 읽습니다 -
. 다시 말하지만, 이것은 cat
다른 유틸리티 에만 해당됩니다 (즉, 쉘 이 수행하지 않는 기능). cat
이름 이 현재 디렉토리에있는 파일에서 사용하려면 파일 이름 -
에 대한 경로 (예 :)를 추가하십시오 ./-
.
¹ 일부 상황에서는 리디렉션 순서가 여전히 중요합니다. 로 cat <file2 >file1
예를 들어, file1
경우 절단되지 않습니다 file2
액세스 할 수없는합니다 (리디렉션이 왼쪽에서 오른쪽으로 구문 분석). cat
그러나 단어의 상대적 배치는 여전히 임의적이며 이에 영향을 미치지 않습니다.
² " cat 존재하지 않는 파일을 열 때 다른 오류가 발생합니다 "질문을 참조하십시오 .
쉘이 명령 행에서 명령을 실행하기 전에 경로 재 지정을 설정한다는 사실은 이와 같은 것들이 실패하고 빈 출력 파일로 끝나는 이유입니다.
$ sort file >file
여기서 셸은 표준 출력을 file
실행 sort file
하고 파일에 연결 하기 전에 파일을 자릅니다 (빈) sort
. 그러면 sort
유틸리티가 file
내용 을 열고 정렬합니다 (아무 것도 아님). 결과 (아무것도)는 표준 출력 스트림을 통해로 전달됩니다 file
.
이 특정 경우 (파일을 "in-place"정렬하는 경우)의 해결책은 다음과 같습니다.
$ sort -o file file
또는
$ sort file >file.sorted && mv file.sorted file
이는 파일을 사용하여 출력 파일 이름을 지정할 sort
때 수행하는 작업의 양 -o
입니다.
명령 행에서 경로 재 지정이 유틸리티의 실제 이름 앞에 올 수 있다는 명령문을 백업하기 만하면됩니다.
"간단한 명령"은 제어 연산자에 의해 종료되는 임의의 순서대로 선택적 변수 할당 및 재지향의 순서이며, 임의의 순서로 단어 및 재지향이 뒤 따릅니다. [참조 : POSIX Shell Command Language 2.9.1 간단한 명령]
또한 리디렉션이 유틸리티의 피연산자에 속하지 않는 것에 대해서도 :
선택적인 번호, 방향 전환 연산자 및 단어는 실행될 명령에 제공된 인수 (있는 경우)에 나타나지 않아야합니다. [참조 : POSIX 쉘 명령 언어 2.7 리디렉션]