답변:
여기서 두 가지 다른 것을 사용하고 있으며 세 번째를 사용해야합니다. 보자 :
|: 이것은 파이프 연산자이며 한 프로세스의 출력을 다른 프로세스의 입력으로 전달하는 역할을합니다.
foo | bar
이것은 프로그램을 실행 foo하고 출력을 입력으로 프로그램 에 전달합니다 bar.
>, <, >>과 <<: 이들은입니다 리디렉션 연산자 가에서 /로 데이터를 전송하는 역할을, 파일 :
foo > bar: 프로그램을 실행 foo하고 그 출력을 저장 파일 bar , 덮어 쓰기 한 내용을 그것이 존재하지 않는 경우는, 작성합니다.
foo >> bar: 프로그램을 실행 foo하고 그 출력을 저장 파일 bar , 추가 내용과 그것이 존재하지 않는 경우는, 작성합니다.
foo < bar: 파일foo 에서 입력을 읽도록 지시 합니다 bar .
는 <<명령을 "추가"입력에 아무 문제가 없으므로,이 특별한 경우 <<에 사용 주로 (전용 AFAIK)입니다 여기 서류 :
$ cat << EOF > file.txt
> Hello World!
> EOF
구문 << SomeStringHere > Out.file은 끝나는 문자열 ( EOF위의 예에서)이 나타날 때까지 작성된 모든 텍스트 를 대상 파일로 리디렉션 합니다. 이 문서를 사용하면 여러 줄 문자열을 쉽게 형식화하고 변수와 특수 문자를 포함시킬 수 있습니다.
<<<연산자 여기서 문자열 하는 다음과 같은 문헌이지만 변수를 확장한다. 예를 들어,
grep foo <<< "$bar"
위의 명령은와 같습니다 echo "$bar" | grep foo.
실제로 찾고있는 것을 프로세스 대체 라고 하며 명령 출력을 다른 것으로 전달하는 또 다른 방법입니다. 로 구성됩니다 <(command).
foo <(bar)
그래서, 당신을 위해 at예를 들어, 당신은 할 수
at now < <(echo "notify-send HELLO")
공정 대체 실제로 파일을 생성하기 때문에 위의 작품 (자세한 내용은 위의 링크를 읽기)과 함께 전달되는 해당 파일의 파일 기술자이다 <에 at now.
1 기본 동작은 덮어 쓰기이며 noclobber옵션을 bash 로 설정하여 수정할 수 있습니다 . 설정 echo foo > bar하면 bar존재 하면 실패 합니다. 이 경우 echo foo |> bar대신에 강제로 사용할 수 있습니다 . 여기에서 섹션 3.6.2를 참조 하십시오 .
<<그리고 <<<(@steeldriver가 그의 답변에서 언급 한)에 대한 정보를 포함하도록 확장 할 수 있습니까 ? 또한,이 더 있습니다 - 같은 >>>>>>나 <<<<<<<<<<?
<<<:)
이 경우, echo "notify-send HELLO"A는 공정 당신이 필요 - 그래서하지 않는 파일은 공정 대체를 파일 리디렉션보다는
at now < <(echo "notify-send HELLO")
명령을 완전히 피하기 위해 here 문자열 을 사용할 수도 있습니다echo
at now <<< "notify-send HELLO"
foo | bar와bar < foo동일합니다. 그들은 아닙니다.