이후 EOF를 발생시키지 않고 프로세스의 표준에 데이터를 파이핑


33

사용자 대화 형 셸을 시작하는 실행 파일이 있습니다. 셸을 시작할 때 몇 가지 명령을 먼저 주입 한 다음 사용자가 대화식 세션을 갖기를 원합니다. 나는 이것을 사용하여 쉽게 할 수있다 echo:

echo "command 1\ncommand 2\ncommand3" | ./shell_executable

이것은 거의 작동합니다. 문제는 프로세스의 stdin을 공급하는 echo 명령이 명령을 반향하면 EOF에 도달한다는 것입니다. 이 EOF는 쉘에서 Ctrl + D를 누른 것처럼 쉘을 즉시 종료시킵니다.

나중에 EOF를 발생시키지 않고 이러한 명령을 stdin에 주입하는 방법이 있습니까?


./shell_executable명령 목록 끝에 추가해 보셨습니까 ? 두 개의 실행 인스턴스 (부모 및 자식)가 있지만 계속 진행될 수 있습니다.
goldilocks

답변:


40

stackoverflow 에서 비슷한 질문 에서이 영리한 답변을 찾았습니다.

(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable

이것은 트릭을 수행합니다. shell_ executable의 입력 스트림으로 cat출력을 펌핑하고 echoEOF까지 더 많은 입력을 기다립니다.


@ jw013 맞습니다. 게시물을 수정했습니다. 감사. 괄호없이 실험 할 때 cmd 1답장을 보았지만 다음에 의해 생성 된 o / p 여야한다는 것을 알지 못했습니다.cmd 1
Gowtham

이 작품은 굉장합니다! 방금 시간을 절약 해 주셨어요 고맙습니다!!
jaggedsoft

21

이 작업을 수행하는 가장 깨끗한 방법은 bash--rcfile옵션 과 같은 것을 찾는 것입니다 . 사용자 정의 명령을 사용자 정의 파일에 넣고 대화식 쉘로 전달하여 시작시 실행하십시오.

이러한 옵션이 없으면 다음을 시도해보십시오.

cat custom_commands_file - | ./shell_executable

cat-stdin으로 해석 됩니다.


아주 좋은 해결책 💪😠
dctremblay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.