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(및 기타 쉘)에 있습니다.
일반적으로 두 가지 방법이 있습니다. 하나는 표준 입력(및 리디렉션)을 통한 것이고 다른 하나는 매개변수를 통한 것입니다.
표준 입력 및 리디렉션
이는 기본적으로 명령이 실행되는 터미널에 연결되는 스트림이며 fd(파일 설명자) 1과 연결됩니다. 터미널에 입력하는 모든 내용이 입력됩니다.
|
파이프를 사용하거나 여기에서 문서를 사용하거나 여기에서 문자열을 사용하는 것처럼 입력 (입력)이 리디렉션될 수 있지만 . 그런 다음 입력은 터미널에서 나오는 것이 아니라 파이프에 추가되기 전 명령의 표준 출력입니다. 셸마다 리디렉션이 다르므로 이 범주에 대한 셸 설명서를 확인해야 합니다. 찾다리디렉션을 입력합니다.매개변수
이것이 귀하의 예에 있는 것입니다
sort foo
. 프로그램이나 함수를 호출할 때 하나 이상의 매개변수를 전달합니다. 로컬 파일은 하나의 가능성일 뿐입니다. 이 매개변수에는 URL이나 기타 콘텐츠가 포함될 수 있습니다. 여기의 옵션은 끝이 없습니다.
요약하자면 일반적으로 두 가지 방법이 있습니다.
첫 번째는 애플리케이션의 내부 논리를 추상화하고 OS/셸 수준의 표준 입력에서 작동합니다.
두 번째는 애플리케이션의 내부 구조와 관련이 있지만 호출 매개변수를 인터페이스로 기반으로 무한한 가능성을 제공하는 것은 바로 구조입니다.
두 경우 모두 대답에는 제한이 없습니다. 실제 제한 사항은 운영 체제/셸 및 애플리케이션 자체에서 발생합니다.
답변2
최소한 다음 사항이 있습니다.
명령 옵션:
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이 파일(또는 이와 유사한 것)이라는 것을 알고 있습니다. 이와 같은 파일을 전달하는 것은 실제로 옵션을 전달하는 것과 동일합니다.