많은 사람들이 줄을 따라 코드가 들어있는 원 라이너와 스크립트를 사용합니다
cat "$MYFILE" | command1 | command2 > "$OUTPUT"
첫 번째 cat
기술적으로는 새로운 프로세스 (종종 시작해야하기 때문에 종종라고 "고양이의 쓸모 사용" /usr/bin/cat
명령이 있었다면이 피할 수)
< "$MYFILE" command1 | command2 > "$OUTPUT"
쉘은 시작 command1
하고 단순히 stdin
주어진 파일을 가리 키기 만하면 되기 때문 입니다.
셸이이 변환을 자동으로 수행하지 않는 이유는 무엇입니까? "고양이의 쓸모없는 사용"구문은 읽기 쉽고 쉘은 쓸모없는 고양이를 자동으로 제거하기에 충분한 정보가 있어야한다고 생각합니다. 는 cat
쉘 경로에 바이너리를 사용하는 내부 대신을 구현할 수 있어야하므로 POSIX 표준에 정의되어 있습니다. 쉘에는 정확히 하나의 인수 버전에 대한 구현과 경로의 이진 대체가 포함될 수도 있습니다.
lseek
등 여전히 동작을 정의하고 다른 결과를 야기 할 수는, 다른 차단 동작은 의미 론적으로 의미가있을 수 있습니다 당신이 무엇을 알고 있다면 변화를 만들기 위해 허용 될 다른 명령했다 그들은 상관하지 않았다 알고, 또는 그 수준에서 호환성에 신경 쓰지 않았지만 이점은 거의 없습니다. 이점이 부족하면 상황이 적합성 비용보다 더 많이 발생한다고 생각합니다.
cat
자체 또는 다른 유틸리티 를 구현할 수 있습니다. 또한 시스템에 속한 다른 유틸리티가 어떻게 작동하는지 알 수 있습니다 (예 : 시스템과 함께 제공된 외부 grep
구현 이 어떻게 작동하는지 알 수 있습니다 ). 이것은 완전히 가능하기 때문에 왜 그렇지 않은지 궁금해하는 것은 전적으로 공정합니다.
grep
. 그리고 sed
. 그리고 awk
. 그리고 du
. 그리고 수천 개의 다른 유틸리티가 아니라면 몇 백 명입니까?