처리된 파일에 대해 "<" 명령을 사용하여 파일 리디렉션 입력

처리된 파일에 대해 "<" 명령을 사용하여 파일 리디렉션 입력

나는 종종 다음과 같은 구문을 본다:

awk 'stuff' <file
sort <file

문제는 제가 보통 이렇게 쓴다는 겁니다.

awk 'stuff' file
sort file

일이 잘 진행되고 있습니다. 그렇다면 두 구문이 대략 동일하다면(또는 동일합니까?) <file구문을 사용하면 어떤 이점이 있습니까?

편집하다

내 문의 사항 중 일부를 다루는 기존 스레드가 있습니다( <쉘을 사용하여 파일 열기첫 번째그리고그 다음에명령의 표준 입력으로 전달), 일부는 아직 남아 있는 것 같습니다.

  • POSIX 준수?
  • file논쟁의 성격에 대한 모호함을 제거하기 위한 것입니까?
  • 특정 유형의 쉘에만 해당됩니까?
  • 더 이상 사용되지 않는 것으로 간주됩니까?
  • 성능면에서 상당한 차이가 있나요?
  • 하나를 다른 것과 비교하여 사용하는 모든 예를 환영합니다.

답변1

명령이 표준 입력(forms command <file) 또는 인수 목록의 명명된 파일에서 읽기를 지원하는 경우 둘 다 작동합니다. tcsh지원 되므로 command <file구문은 상당히 이식 가능합니다. 주어진 명령이 인수 목록(또는 표준 입력)의 파일을 읽을 수 있는지 여부는 명령에 따라 다릅니다. ed(1)예를 들어 표준 입력에서 읽는 명령은 표준 입력에서 파일을 읽을 수 없습니다.

C 수준에서는 표준 입력이나 명명된 파일에서 읽는 명령이 유사한 작업을 수행합니다.

#include <err.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    FILE *fhandle;

    // option processing here ...

    if (argc == 0 || strncmp(*argv, "-", (size_t) 2) == 0) {
        fhandle = stdin;
    } else {
        if ((fhandle = fopen(*argv, "r")) == NULL)
            err(1, "could not open '%s'", *argv);
    }

    // read from fhandle here, which is either from stdin or a file ...
}

일부 명령은 command -표준 입력에서 양식 명령을 읽어야 하며, 다른 명령은 인수 목록이 비어 있는 경우(위 코드와 같이) 자동으로 이를 수행합니다. 그렇지 않으면 두 경우 모두 코드가 이를 처리 fhandle하고 입력이 어디에서 왔는지 신경 쓰지 않습니다(오류 메시지에 파일 이름이 포함되어야 하지만 추가 변수에 삽입할 수 있는 경우는 제외).

관련 정보