명령에 텍스트를 보낸 다음 터미널에서 읽는 방법

명령에 텍스트를 보낸 다음 터미널에서 읽는 방법

명령의 표준 입력으로 무언가를 보낸 다음 터미널에서 계속 읽을 수 있는지 궁금합니다.

제가 해결하려는 문제는 Node.js REPL을 열 때마다 일부 초기화 코드를 실행하는 것이므로 처음부터 REPL에서 일부 기능을 사용할 수 있습니다. 기본적으로 이를 자동화하려면 다음을 수행하십시오.

$ node
> require('./myutils')
> ... continue using the REPL

이제 다음과 같은 문자열을 사용하여 명령의 표준 입력에 일부 텍스트를 보낼 수 있습니다.

$ node <<<"require('./myutils')"

이렇게 하면 초기화 코드가 실행되지만 그 후 REPL도 즉시 닫힙니다.

아마도 Node.js에는 이 특정 문제에 대한 또 다른 해결책이 있을 수 있지만 문자열이나 파일의 입력을 혼합한 다음 터미널에서 계속 읽는 일반적인 방법이 있는지 궁금합니다.

고쳐 쓰다:Chris Tang의 솔루션작동하지만 Node.js REPL은 기본적으로 대화형 모드에서 실행되지 않습니다(터미널에서 읽지 않기 때문에 예상되는 현상입니다). 다행히 -iNode.js 터미널에는 대화형 모드를 강제하는 옵션이 있습니다.

{ echo "require('./myutils')" ; cat ; } | node -i

답변1

{ echo "require('./myutils')" ; cat ; } | node

REPL 환경은 터미널에서 제공되지 않는 입력을 받을 때 다르게 동작할 수 있습니다(예: 프롬프트가 표시되지 않을 수 있음).

답변2

당신은 그것을 사용할 수 있습니다되감기(다음과 같이 포장됨독서선라이브러리) 대화형 기능이 귀하에게 적합하지 않은 프로그램과 상호작용합니다.

rlwrap node

Rlwrap은 명령에 초기 입력을 보낼 수 없지만 거의 가깝습니다. 일부 초기 항목을 입력 버퍼에 넣을 수 있으므로 를 누르기만 하면 됩니다 Enter.

NODE_NO_READLINE=1 rlwrap -P"require('./myutils')" node

(이 설정은 내장된 readline 지원을 사용하지 않도록 NODE_NO_READLINE지시합니다 .)node

관련 정보