저는 고급 Linux 사용자가 아니기 때문에 몇 가지 새로운 개념을 이해하기가 어렵습니다. 최근에 명령에 대해 읽었 xargs
으며 몇 가지 예를 테스트하고 싶었습니다. 그 중 하나는 나를 정말 혼란스럽게 만들었습니다.
이론은 다음과 같습니다. 에 존재하지 않는 파일 편집을 시작하고 vim
( 를 사용하여 ) vim someFile
편집 후에 만 :qw
파일을 생성 할 수 있다면( 를 사용하여) echo
및 다음을 사용하여 xargs
동일한 작업을 수행 할 수 있습니다.
echo "someFile" | xargs vim
xargs
echo
from 의 출력을 가져 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