왜 입력 않습니다 BASH에"mycommand >> file1 >> file2"두 파일에 모두 추가되지 않는 이유는 무엇입니까?
date >> log >> file
는 파일에 날짜를 추가 및 로그에 영향을주지 않습니다?
왜 입력 않습니다 BASH에"mycommand >> file1 >> file2"두 파일에 모두 추가되지 않는 이유는 무엇입니까?
date >> log >> file
는 파일에 날짜를 추가 및 로그에 영향을주지 않습니다?
stdout
하나만 있기 때문에. Bash를 사용하면 stdout
을 원하는 횟수만큼 리디렉션 할 수 있지만 각 리디렉션은 이전 리디렉션을 무시하고 모든 리디렉션은 유틸리티가 실행되기 전에 구성됩니다.
stdin
을 리디렉션하는 경우에도 마찬가지입니다. cat < a < b
은 정확히 같은 이유로 b
의 내용 만 인쇄합니다.
RICI의 대답에 추가하려면, 당신은 tee
를 사용하여 두 파일을 추가 할 수 있습니다 :
date | tee -a log file
을 그것은 주목할 가치가이 같은 떠들썩한 제한 아니라고 - "표준 출력"는 operating-입니다 시스템 레벨 구조, 규칙에 의해 미리 열리는 파일 기술자. 파일 기술자가 하나의 파일만을 참조 할 수 있다는 규칙은 bash의 일부가 아니지만 운영 체제 디자인의 일부입니다. (하나의 파일은 다른 끝에'tee'와 같은 프로그램을 가진 FIFO가 될 수 있고, 각각의'read'를 여러개의 쓰기로 나누지 만 파이프 라인의 왼쪽 끝에있는 프로그램의 관점에서 볼 때 stdout은 여전히 하나의 파일). –
bash는 FIFO 자체의 다른 쪽 끝을 피할 수있는 유일한 방법이며 심각한 부작용이 있습니다. 소프트웨어가 실제로 쓰는 모든 것에 직접 액세스하지 못하도록합니다 (따라서 TTY에 연결되어 있으면 ioctl을 실행할 수 있고 파일에 쓰는 경우 파일 이름을 검색하거나 검색 할 수 없으며 많은 유용한 기능에 액세스 할 수 없습니다. –