redirectioin 연산자를 사용하여 명령에 어떤 매개 변수가 제공되는지 확인하는 방법은 무엇입니까? 보내기”| 지금 이것은하지 않습니다 :

이것은 작동합니다 :

$ echo “HELLO에 알림 보내기”| 지금

이것은하지 않습니다 :

$ 지금 <echo “HELLO에게 알림 보내기”

‘파일 또는 디렉토리를 찾을 수 없습니다’라고 표시되어 있습니다.

-f이 명령 에는 옵션이 있다는 것을 알고 있습니다. 이 명령을 사용하면 주어진 순간에 실행할 파일을 제공 할 수 있습니다.

그래서 이것은 나를 생각하게했습니다 … 일반적으로 리디렉션 연산자가 값을 제공하는 매개 변수를 어떻게 알 수 있습니까?



답변

여기서 두 가지 다른 것을 사용하고 있으며 세 번째를 사용해야합니다. 보자 :

  1. |: 이것은 파이프 연산자이며 한 프로세스의 출력을 다른 프로세스의 입력으로 전달하는 역할을합니다.

    foo | bar

    이것은 프로그램을 실행 foo하고 출력을 입력으로 프로그램 에 전달합니다 bar.

  2. >, <, >><<: 이들은입니다 리디렉션 연산자 가에서 /로 데이터를 전송하는 역할을, 파일 :

    • foo > bar: 프로그램을 실행 foo하고 그 출력을 저장 파일 bar , 덮어 쓰기 내용을 그것이 존재하지 않는 경우는, 작성합니다.

    • foo >> bar: 프로그램을 실행 foo하고 그 출력을 저장 파일 bar , 추가 내용과 그것이 존재하지 않는 경우는, 작성합니다.

    • foo < bar: 파일foo 에서 입력을 읽도록 지시 합니다 bar .

    • <<명령을 “추가”입력에 아무 문제가 없으므로,이 특별한 경우 <<에 사용 주로 (전용 AFAIK)입니다 여기 서류 :

      $ cat << EOF > file.txt
      > Hello World!
      > EOF

      구문 << SomeStringHere > Out.file은 끝나는 문자열 ( EOF위의 예에서)이 나타날 때까지 작성된 모든 텍스트 를 대상 파일로 리디렉션 합니다. 이 문서를 사용하면 여러 줄 문자열을 쉽게 형식화하고 변수와 특수 문자를 포함시킬 수 있습니다.

  3. <<<연산자 여기서 문자열 하는 다음과 같은 문헌이지만 변수를 확장한다. 예를 들어,

    grep foo <<< "$bar"

    위의 명령은와 같습니다 echo "$bar" | grep foo.

  4. 실제로 찾고있는 것을 프로세스 대체 라고 하며 명령 출력을 다른 것으로 전달하는 또 다른 방법입니다. 로 구성됩니다 <(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를 참조 하십시오 .


답변

이 경우, echo "notify-send HELLO"A는 공정 당신이 필요 – 그래서하지 않는 파일은 공정 대체를 파일 리디렉션보다는

at now < <(echo "notify-send HELLO")

명령을 완전히 피하기 위해 here 문자열 을 사용할 수도 있습니다echo

at now <<< "notify-send HELLO"


답변