편집하다:@JdeBP의 의견을 바탕으로 대화형 터미널의 명령 기록과 통화 기록 기능이 서로 다른 두 가지라는 것을 이해합니다. 하지만 GNU readline 기록 호출 함수가 화면에 어떻게 인쇄되는지 여전히 궁금합니다.
나는 bash 명령이 이전 명령을 터미널 창에 인쇄하는 . 별도의 문제(협회) 이제 정확히 어떻게 작동하는지 궁금합니다.history
데 사용되지 않는다는 것을 깨달았습니다stdout
명령을 입력하고 Enter 키를 누르면 위쪽 화살표를 사용하여 이전 명령으로 이동할 수 있습니다. 그러나 이전 명령은 을 통해 전송되지 않았습니다 stdout
. 이는 모든 것을 stdout
화면에 인쇄하기 전에 출력을 수정하는 coprocess로 리디렉션하여 확인할 수 있습니다 . 아래 스크립트가 바로 그 일을 합니다. 입력한 내용을 에코할 뿐 아니라 stdout
사전에 명령으로 리디렉션하기도 합니다.sed
exec 4>&1
coproc out (sed 's/^/PREFIX /' >&4)
exec 1>&${out[1]}
while read -e x; do
echo $x
done
이 스크립트가 실행되면 입력하는 모든 내용이 "PREFIX" 접두사와 함께 인쇄됩니다. 그러나 위쪽 화살표를 사용하여 이전 명령에 액세스하면 "PREFIX"가 앞에 붙지 않습니다.
왜 이런거야? GNU 기록 호출은 어떻게 기록 파일의 텍스트를 터미널 화면에 배치합니까? 을 사용하지 않으면 을 stdout
사용합니까 stderr
, 아니면 다른 것을 사용합니까? 같은 방법으로 리디렉션을 시도했지만 stderr
이로 인해 텍스트가 터미널 화면에 표시되지 않아 위쪽/아래쪽 화살표가 아무것도 인쇄되지 않았습니다. 그래서 확인할 수 없습니다. 나는 이것이 이 역사적 기능을 나타낼 수 있다고 생각합니다.예사용했지만 stderr
확인하고 싶었습니다.