에 저장합니다. 현재 사용자에게 몇 가지 질문을하고 표준 출력에 출력하는 Perl 스크립트 (편집 할 수 없음)가 있습니다. 나는이 스크립트를 호출하는 또 다른 스크립트를 만들고, 사용자가 정상적으로 그것과 상호 작용하도록 허용 한 다음 stdout의 결과를 변수에 저장합니다.대화 형 하위 스크립트를 호출하여 출력을 변수
는 여기에 내가 달성하기 위해 노력하고있어의 정말 간단한 예제 :
(here 연산 드 서켈로 답변에 따라) outer.sh
#!/usr/bin/perl
print "Enter a number:";
$reply = <>;
print "$reply";
inner.pl
#!/bin/bash
echo "Calling inner.pl"
exec 5>&1
OUTPUT=$(./inner.pl | tee >(cat - >&5))
echo "Retrieved output: $OUTPUT"
원하는 출력 :
$ ./outer.sh
Calling inner.pl
Enter a number: 7
7
Retrieved output: 7
그러나이 스크립트를 시도하면 inner.sh에서 아무 것도 인쇄하지 않고 "hanging"전에 Calling inner.pl
을 출력합니다.
script
명령을 사용하여 전체 inner.sh 교환을 임시 파일에 저장 한 다음 sed
등을 사용하여 문제를 해결할 수있는 해결 방법을 발견했습니다. 하지만 임시 파일을 만드는 것만으로는 그다지 사소한 일이 아닙니다. script
은 타임 스탬프를 추가하는 것을 좋아하지 않으며 모든 것에 \r
을 추가하는 것을 좋아하지 않습니다. 이를 수행하기위한 비 - script
방법이 있습니까?
하여 예'inner.sh'가와'outer.sh'이 ... 나를 위해 완벽하게 작동 –
아마도 내가 다음을 지나치게 단순화. 원래 "inner.sh"는 실제로 Perl 스크립트입니다. 나는 Perl에 대해 아무 것도 모른다. 그러나 아마도 그것이 내 출력이 작동하지 않는 이유 일 수 있을까? 어쩌면 펄은 파일 기술자와 stdout을 다르게 처리 할까? - 그럴 경우, 내 질문에 그 세부 사항을 추가 할 것입니다. – spellbee2