내가 리눅스에 대해 가장 먼저 알아 차린 것은 명령에 데이터를 공급하는 다른 방법들이었다.
내가 지금까지 알고있는 방법 :
관:
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
이것이 전부입니까, 아니면 더 많은 방법이 있습니까, 왜 전혀 다른 방법이 있습니까?
답변
최소한 다음은 :
-
명령 옵션 :
foo --bar
-
표준 입력 :
foo | bar
또는bar < foo
-
파일 :
foo *.*
또는 코드를 통해 파일을 열어서foo
† -
환경 수출 :
export foo=bar; baz
-
환경 (내보내기 제외) :
foo=bar baz
또는env foo=bar baz
-
여기 문서가 있습니다 :
foo << EOF
bar
EOF -
여기에 문자열 :
foo <<< bar
-
신호
kill -SIGUSR1 $procid
-
소켓, TCP, 메모리 매핑 파일과 같은 다양한 프로세스 간 통신
† 예, stdin이 파일 (또는 파일과 같은)이라는 것을 알고 있습니다. 그리고 이와 같은 파일을 전달하는 것은 옵션을 전달하는 것과 같습니다.
답변
우선, sort << HERE
여기에 문자열이 아닙니다. 여기 문서입니다. here-string은 <<<
연산자를 사용합니다 . 그것은 bash (및 다른 쉘)에 있습니다.
일반적으로 두 가지 방법이 있습니다. 하나는 표준 입력 (및 방향 재 지정)을 통하고 다른 하나는 매개 변수를 통합니다.
-
표준 입력 및 리디렉션
이것은 기본적으로 터미널에 연결되어 명령이 실행되고 fd (파일 설명자) 1과 연결되는 스트림입니다. 터미널에 입력 된 모든 내용이 제공됩니다. 파이프를
|
사용하거나 here-documents 또는 here-strings 를 사용하는 것처럼 입력 (입력)을 리디렉션 할 수 있습니다 . 그런 다음 입력은 터미널에서 나오지 않지만 파이프 앞에 오는 명령의 표준 출력에 연결됩니다. 쉘마다 방향이 다르므로이 범주에 대해서는 쉘 설명서를 확인해야합니다. 입력 리디렉션을 찾으십시오 . -
매개 변수
이것이 귀하의 예입니다
sort foo
. 프로그램이나 함수를 호출하면 하나 이상의 매개 변수를 전달합니다. 로컬 파일은 하나의 가능성 일뿐입니다. 매개 변수는 URL 또는 기타를 포함 할 수 있습니다. 여기의 옵션은 끝이 없습니다.
요약하면 두 가지 일반적인 방법이 있습니다.
-
첫 번째는 응용 프로그램의 내부 논리를 추상화하고 OS / 쉘 수준의 표준 입력을 조작합니다.
-
두 번째는 응용 프로그램의 내장과 관련이 있으며 인터페이스로서의 호출 매개 변수를 기반으로 무한한 가능성을 제공합니다.
두 가지 방법 모두에 대한 답은 제한이 없습니다. 실제 한계는 OS / shell 및 응용 프로그램 자체와 함께 제공됩니다.