고양이만큼 역사적인 것이 있을까요?

고양이만큼 역사적인 것이 있을까요?

이는 반복적으로 작동하는 프로그램에 관한 것입니다. 표준 입력에서 입력을 받아 결과를 표준 출력으로 전달하는 것입니다. 프로그램에 전달해야 하는 알려진 텍스트 세트가 있는데, 이를 파일에 넣었습니다 begin.txt. 그래서 파이프라인을 설정할 수 있습니다.

cat begin.txt - | myprogram

문제는 나중에 발생합니다. 이미 입력한 내용(약간 수정한 내용)을 보내려는 경우 기록이 없기 때문에 화살표가 작동하지 않습니다.cat

  1. 그래서 각 라인의 역사를 보존할 수 있는 것을 찾고 있어요.

vim처음에는 를 사용해 보았지만 :.! myprogram항목(전달된 텍스트)을 실행한 후 종료되고 myprogram해당 상태가 손실되었습니다. 텍스트/명령이 전달될 때까지 프로그램을 계속 실행하는 방법이 필요합니다.

  1. vim파이프라인에서 필터 역할을 하는 연속적인 방식으로 작동하는 것이 가능합니까 ?

답변1

사용 rlwrap. 이 rlwrap유틸리티는 ReadLine 기록(및 프롬프트에서 익숙한 것과 같은 일부 ReadLine 편집 기능 bash)을 가져오도록 사용하는 모든 유틸리티를 래핑합니다. 아래 파일에 기록을 저장합니다 $RLWRAP_HOME(또는 $HOME변수가 설정되지 않은 경우).

그것으로 rlwrap당신은 그것을 할 수 있습니다

rlwrap cat begin.txt - | myprogram

다음에 이 프로그램을 실행하면 Up-arrow및 키 입력을 사용하여 Down-arrow스크롤 할 수 있는 기본 기록이 생성됩니다. 기록은 기본적으로 ~/.cat_history.

자세한 내용은 rlwrap( ) 설명서를 참조하십시오.man rlwrap

답변2

cat begin.txt - << EOF
Type the 
text you want
here, terminated by a line with only
EOF

바라보다https://stackoverflow.com/q/2500436작동 방식에 대한 자세한 내용.

이 시간 동안 입력하는 모든 내용은 bash 기록에 저장되므로 원하는 대로 편집할 수 있습니다.

좀 더 유연한 것을 원한다면 임시 파일을 만들어서 편집해 보는 것은 어떨까요?

cat begin.txt > /tmp/myprograminput
editor /tmp/myprograminput
cat /tmp/myprograminput | myprogram

관련 정보