Vim: 경고: 입력이 터미널에서 나오지 않습니다.

Vim: 경고: 입력이 터미널에서 나오지 않습니다.

저는 고급 Linux 사용자가 아니기 때문에 몇 가지 새로운 개념을 이해하기가 어렵습니다. 최근에 명령에 대해 읽었 xargs으며 몇 가지 예를 테스트하고 싶었습니다. 그 중 하나는 나를 정말 혼란스럽게 만들었습니다.

이론은 다음과 같습니다. 에 존재하지 않는 파일 편집을 시작하고 vim( 를 사용하여 ) vim someFile편집 후에 만 :qw파일을 생성 할 수 있다면( 를 사용하여) echo및 다음을 사용하여 xargs동일한 작업을 수행 할 수 있습니다.

echo "someFile" | xargs vim

xargsechofrom 의 출력을 가져 stdout와서 에 매개변수로 전달합니다 vim. 그러나 이로 인해 다음과 같은 오류가 발생하는 것 같습니다.

Vim: 경고: 입력이 터미널에서 나오지 않습니다.

가장 이상한 점은 vim오류가 인쇄된 후 1초 후에 파일이 열리지만 저장하고 종료하면 vim터미널에 완전히 버그가 발생한다는 것입니다. 터미널을 수정하려면 tmux 창을 닫아야 합니다. 이 모든 과정이 끝나면 파일이 생성되고 내용은 예상한 대로 됩니다. 여기에 뭔가 문제가 있는 것이 분명했지만 그 이유는 전혀 알 수 없었습니다.

나는 이것을 찾았다질문StackOverflow에 있지만 내 질문에 대답하지 않습니다.

답변1

stty sane터미널 문제를 해결해 드리겠습니다.

이는 하위 프로세스에서 열리지 xargs않았기 때문에 발생합니다 .tty

"open tty" 옵션을 추가해야 합니다 -o.xargs

echo "sane" | xargs -o stty

그러면 stty sane터미널에 연결되어 실행됩니다. 오류가 발생하지 않습니다.

echo "sane" | xargs stty

BSD에서는 오류가 발생합니다.

stty: stdin은 터미널이 아닙니다

리눅스의 경우:

stty: '표준 입력': 장치에 부적절한 ioctl

이것은 나에게 효과적입니다.

echo /etc/hosts | xargs -o vim

관련 정보