문자가 파일에서 온 것처럼 명령에 문자를 보내려면 어떻게 해야 합니까?

문자가 파일에서 온 것처럼 명령에 문자를 보내려면 어떻게 해야 합니까?

문자가 파일에서 온 것처럼 명령에 문자를 보내려면 어떻게 해야 합니까?

예를 들어 다음을 시도했습니다.

wc < "apple pear orange"
-bash: apple pear orange: No such file or directory

답변1

지원되는 쉘에서여기 문자열이 있습니다bash, zsh및 를 포함하여 ksh93사용할 수 있습니다.

wc <<< "apple pear orange"

답변2

다른 두 가지 방법(추가 노력 없이 여러 줄 입력 가능):

  1. "여기에 문서"를 사용하십시오.

    $ wc << EOF
    사과 배 오렌지
    EOF
      1 3 18
    $

    문자열 EOF은 구분 기호입니다. EOF일반적인 선택만으로 어떤 문자열이든 사용할 수 있습니다 .

  2. tty를 입력으로 사용하십시오.

    $ 화장실
    사과 배 오렌지
    Ctrl+D
      1 3 18
    $

    이 방법의 단점은 프로그램 이름을 입력하자마자 프로그램이 실행을 시작하고 입력 내용을 읽기 시작한다는 것입니다. 예를 들면 다음과 같습니다.

    $ grep v
    민첩한 갈색여우             (유형)
    뛰어 넘다                      (유형)
    뛰어 넘다                      (이것은 grep의 출력입니다!)
    게으른 개.                   (유형)
    Ctrl+D
                                    (여기서는 출력이 없습니다)
    $

답변3

여기에는 여러 가지 유효한 솔루션이 있지만 때로는 유용한 또 다른 구문이 있습니다 <(). 이를 통해 명령줄에서 여러 파일 설명자 개체를 만들 수 있습니다.

이는 긴 텍스트 문자열을 비교하거나 파일에 없는 항목을 비교하려는 경우에 유용합니다.

예를 들어, 호스트 파일을 로컬 호스트에 복사하지 않고 두 노드의 호스트 파일을 비교하려면 다음을 수행하십시오.

diff -Naur <(cat /etc/hosts) <(ssh -q otherhost 'cat /etc/hosts')

<파일을 STDIN으로 리디렉션 하고 ()하위 셸을 만들어 대괄호 사이에 명령을 실행합니다. 실행 중인 명령의 STDIN으로 전달되는 하위 쉘의 STDOUT입니다.

명령에 대한 여러 입력 "파일"을 만드는 것은 여러 문서를 사용하거나 여러 명령을 최종 명령으로 다시 파이프하는 것보다 더 간단한 접근 방식입니다.

답변4

예상과 비슷한 것을 사용하고 싶을 수도 있습니다. 다음은 원격 텔넷 세션 열기, 프롬프트 대기, 일부 데이터 전송, 응답 대기, 잠자기 및 종료에 대한 간단한 예입니다.

#!/usr/bin/expect
spawn telnet localhost 8555
expect "Escape character is '^]'."
send "Hello World\n"
expect "Connection closed by foreign host."
sleep 1

관련 정보