명령에 입력을 제공하는 방법은 총 몇 가지입니까?

명령에 입력을 제공하는 방법은 총 몇 가지입니까?

Linux에 대해 제가 가장 먼저 알아차린 것은 명령에 데이터를 입력하는 다양한 방법이었습니다. 몇 가지를 알고 있었지만 총 얼마나 많은지 전혀 몰랐습니다.

지금까지 내가 아는 방법은 다음과 같습니다.

관로:

echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort

파일 끝 신호가 있는 키보드에서:

sort
>gurken
>zucker
>braunkohle

문서에서:

sort foo

HERE 문자열(실제로는 HERE 문서라고 함):

sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE

이것이 전부입니까, 아니면 더 많은 방법이 있습니까? 왜 다른 방법이 있습니까? 일부는 중복됩니까?

답변1

우선 sort << HERE여기서 wait는 문자열이 아닙니다. 이것은 여기 문서입니다. 여기의 문자열은 <<<연산자를 사용합니다. 이것은 bash(및 기타 쉘)에 있습니다.

일반적으로 두 가지 방법이 있습니다. 하나는 표준 입력(및 리디렉션)을 통한 것이고 다른 하나는 매개변수를 통한 것입니다.

  1. 표준 입력 및 리디렉션

    이는 기본적으로 명령이 실행되는 터미널에 연결되는 스트림이며 fd(파일 설명자) 1과 연결됩니다. 터미널에 입력하는 모든 내용이 입력됩니다. |파이프를 사용하거나 여기에서 문서를 사용하거나 여기에서 문자열을 사용하는 것처럼 입력 (입력)이 리디렉션될 수 있지만 . 그런 다음 입력은 터미널에서 나오는 것이 아니라 파이프에 추가되기 전 명령의 표준 출력입니다. 셸마다 리디렉션이 다르므로 이 범주에 대한 셸 설명서를 확인해야 합니다. 찾다리디렉션을 입력합니다.

  2. 매개변수

    이것이 귀하의 예에 있는 것입니다 sort foo. 프로그램이나 함수를 호출할 때 하나 이상의 매개변수를 전달합니다. 로컬 파일은 하나의 가능성일 뿐입니다. 이 매개변수에는 URL이나 기타 콘텐츠가 포함될 수 있습니다. 여기의 옵션은 끝이 없습니다.

요약하자면 일반적으로 두 가지 방법이 있습니다.

  • 첫 번째는 애플리케이션의 내부 논리를 추상화하고 OS/셸 수준의 표준 입력에서 작동합니다.

  • 두 번째는 애플리케이션의 내부 구조와 관련이 있지만 호출 매개변수를 인터페이스로 기반으로 무한한 가능성을 제공하는 것은 바로 구조입니다.

두 경우 모두 대답에는 제한이 없습니다. 실제 제한 사항은 운영 체제/셸 및 애플리케이션 자체에서 발생합니다.

답변2

최소한 다음 사항이 있습니다.

  1. 명령 옵션:foo --bar

  2. 표준 입력: foo | bar또는bar < foo

  3. 파일: ( foo *.*또는 코드를 통해 파일 열기 foo) †

  4. 환경 출력:export foo=bar; baz

  5. 환경(내보내기 없음): foo=bar baz또는env foo=bar baz

  6. 문서는 다음과 같습니다.foo << EOF bar EOF

  7. 문자열은 다음과 같습니다.foo <<< bar

  8. 신호kill -SIGUSR1 $procid

  9. 전체 범위프로세스 간 통신, 소켓, TCP, 메모리 매핑 파일 등

† 예, stdin이 파일(또는 이와 유사한 것)이라는 것을 알고 있습니다. 이와 같은 파일을 전달하는 것은 실제로 옵션을 전달하는 것과 동일합니다.

관련 정보