입력으로 명령을 공급하는 방법에는 총 몇 가지가 있습니까?


9

내가 리눅스에 대해 가장 먼저 알아 차린 것은 명령에 데이터를 공급하는 다른 방법들이었다.

내가 지금까지 알고있는 방법 :

관:

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

이것이 전부입니까, 아니면 더 많은 방법이 있습니까, 왜 전혀 다른 방법이 있습니까?

답변:


9

최소한 다음은 :

  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이 파일 (또는 파일과 같은)이라는 것을 알고 있습니다. 그리고 이와 같은 파일을 전달하는 것은 옵션을 전달하는 것과 같습니다.


1
foo < bar추가 변형 (stdin을 통한 파일)으로 추가 할 수 있습니다
Hagen von Eitzen

14

우선, sort << HERE여기에 문자열이 아닙니다. 여기 문서입니다. here-string은 <<<연산자를 사용합니다 . 그것은 bash (및 다른 쉘)에 있습니다.

일반적으로 두 가지 방법이 있습니다. 하나는 표준 입력 (및 방향 재 지정)을 통하고 다른 하나는 매개 변수를 통합니다.

  1. 표준 입력 및 리디렉션

    이것은 기본적으로 터미널에 연결되어 명령이 실행되고 fd (파일 설명자) 1과 연결되는 스트림입니다. 터미널에 입력 된 모든 내용이 제공됩니다. 파이프를 |사용하거나 here-documents 또는 here-strings 를 사용하는 것처럼 입력 (입력)을 리디렉션 할 수 있습니다 . 그런 다음 입력은 터미널에서 나오지 않지만 파이프 앞에 오는 명령의 표준 출력에 연결됩니다. 쉘마다 방향이 다르므로이 범주에 대해서는 쉘 설명서를 확인해야합니다. 입력 리디렉션을 찾으십시오 .

  2. 매개 변수

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

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

  • 첫 번째는 응용 프로그램의 내부 논리를 추상화하고 OS / 쉘 수준의 표준 입력을 조작합니다.

  • 두 번째는 응용 프로그램의 내장과 관련이 있으며 인터페이스로서의 호출 매개 변수를 기반으로 무한한 가능성을 제공합니다.

두 가지 방법 모두에 대한 답은 제한이 없습니다. 실제 한계는 OS / shell 및 응용 프로그램 자체와 함께 제공됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.