이는 반복적으로 작동하는 프로그램에 관한 것입니다. 표준 입력에서 입력을 받아 결과를 표준 출력으로 전달하는 것입니다. 프로그램에 전달해야 하는 알려진 텍스트 세트가 있는데, 이를 파일에 넣었습니다 begin.txt
. 그래서 파이프라인을 설정할 수 있습니다.
cat begin.txt - | myprogram
문제는 나중에 발생합니다. 이미 입력한 내용(약간 수정한 내용)을 보내려는 경우 기록이 없기 때문에 화살표가 작동하지 않습니다.cat
- 그래서 각 라인의 역사를 보존할 수 있는 것을 찾고 있어요.
vim
처음에는 를 사용해 보았지만 :.! myprogram
항목(전달된 텍스트)을 실행한 후 종료되고 myprogram
해당 상태가 손실되었습니다. 텍스트/명령이 전달될 때까지 프로그램을 계속 실행하는 방법이 필요합니다.
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