연속 파이프라인 입력 명령

연속 파이프라인 입력 명령

명령에 지속적으로 값을 전달하는 방법이 있나요? 예를 들어, command.pl입력한 responsey확인(자동으로 확인하는 방법이 없기 때문에)할 수 있고 원하는 경우 어떻게 해야 합니까?

이것을 시도해 보았지만 echo "y" | echo "response" | ./command.pl파이프의 순서가 왼쪽에서 오른쪽이기 때문에 작동하지 않습니다. 기본적으로 다음 명령을 실행하기 전에 파이프라인을 실행해야 합니다. 괄호나 따옴표 같은 것에 대한 트릭이 있나요?

답변1

가장 간단한 해결책은 두 개의 echo 명령을 결합하는 것입니다.

echo $'y\nresponse' | ./command.pl

$작은 따옴표와 앞에 a를 사용하여 문자열을 작성하면 bash가 와 같은 이스케이프 시퀀스를 해석하도록 지시합니다 \n.

전달하려는 명령이 더 복잡한 경우 중괄호로 그룹화할 수 있습니다.

{ echo y; echo response; } | ./command.pl

괄호도 작동하지만 불필요한 추가 하위 쉘을 생성합니다(약간 효율성이 떨어짐).

(echo y; echo response) | ./command.pl

또 다른 옵션은 프로세스 교체입니다.

./command.pl < <(echo y; echo response)

답변2

echo두 답변을 개행 문자로 구분하여 하나로 그룹화해 보셨나요 ?

echo -e "response\ny" | ./command.pl

백슬래시 이스케이프 해석을 활성화하려면 이 -e플래그가 bash필요합니다( bashUnix 적합성 모드가 아닌 경우).

또는 더 휴대성이 뛰어납니다.

echo 'response
y' | ./command.pl

또는:

printf 'response\ny\n' | ./command.pl

또는:

printf '%s\n' response y | ./command.pl

편집하다:

언급하는 것을 잊었지만 초기 명령의 문제점은 echoSTDIN을 통한 입력을 허용하지 않는다는 것입니다. 이 명령의 출력은 echo "y"결코 도달되지 않습니다 ./command.pl.

답변3

당신은 또한 사용할 수 있습니다여기 문서:

./command.pl <<END
response
y
END

답변4

명령을 파일에 넣은 다음 파일을 명령에 넣었더니 제대로 작동했습니다.

cat blah.txt | ./command

돌아왔을 때 user43791의 답변을 보았으므로 이를 답변으로 받아들일 것입니다. 제가 한 것과 동일하지만 더 간결해 보입니다.

관련 정보