명령에 지속적으로 값을 전달하는 방법이 있나요? 예를 들어, command.pl
입력한 response
후 y
확인(자동으로 확인하는 방법이 없기 때문에)할 수 있고 원하는 경우 어떻게 해야 합니까?
이것을 시도해 보았지만 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
필요합니다( bash
Unix 적합성 모드가 아닌 경우).
또는 더 휴대성이 뛰어납니다.
echo 'response
y' | ./command.pl
또는:
printf 'response\ny\n' | ./command.pl
또는:
printf '%s\n' response y | ./command.pl
편집하다:
언급하는 것을 잊었지만 초기 명령의 문제점은 echo
STDIN을 통한 입력을 허용하지 않는다는 것입니다. 이 명령의 출력은 echo "y"
결코 도달되지 않습니다 ./command.pl
.
답변3
당신은 또한 사용할 수 있습니다여기 문서:
./command.pl <<END
response
y
END
답변4
명령을 파일에 넣은 다음 파일을 명령에 넣었더니 제대로 작동했습니다.
cat blah.txt | ./command
돌아왔을 때 user43791의 답변을 보았으므로 이를 답변으로 받아들일 것입니다. 제가 한 것과 동일하지만 더 간결해 보입니다.