릴리스 버전:우분투-18.04(Windows 10 WSL2에서 실행)
새로운 Ubuntu 인스턴스의 터미널이 "Vim: 경고: 출력이 터미널에 출력되지 않습니다"라는 메시지와 함께 완전히 정지됩니다.
VIM에서 .bashrc 파일을 편집한 후에 이런 일이 발생했습니다. 제가 한 것은 별칭 몇 개를 추가한 것뿐입니다.엘에스주문하다. 를 입력했더니 source .bashrc
위와 같은 메시지가 떴습니다. ctrl+C 또는 ctrl+z를 눌러 아무것도 할 수 없으며 명령 입력을 허용하는 프롬프트도 나타나지 않습니다.
.bashrc 파일을 편집하면서 어떤 종류의 실수를 저지르고 있는 것이 거의 확실하지만 파일을 편집하고 실행하는 것은커녕 파일을 볼 수도 없습니다. 전체 배포판을 다시 설치하는 것 외에 이 문제를 해결할 수 있는 다른 방법이 있습니까?
편집 1: Windows 파일 탐색기를 통해 bashrc 파일을 볼 수 있습니다. 이것은 그것의 일부입니다:
제가 편집한 유일한 부분은 starship이라는 새 별칭을 추가하는 것이었으므로 다음 부분만 남았습니다.
alias starship='vi ~/.config/starship.toml'
나에게는 구문이 올바른 것처럼 보이므로 이제 이 문제가 발생하는 이유가 더 혼란스럽습니다.
편집 2: 터미널이 잠시 멈췄다가 중지되었으며 이제 터미널에서 다시 작업할 수 있습니다. 나 진짜 아무것도 안했는데 그냥 기다리자 나는 문제가 별칭 추가 및 Starship 프롬프터와 관련된 모든 것과 관련이 없다고 생각합니다.
편집 3: 답변 제공TheDr01ds가 아님문제를 완벽하게 해결했습니다. 제안대로무루eval "$(starship init bash)"
, 새 별칭이 호출되므로 별칭이 처음에 문제를 일으켰음에 틀림없습니다.우주선.
답변1
제 생각에는 이것은 예상된 동작입니다. 최근 편집 내용에 따르면 터미널 제어권을 다시 얻었지만 다음에 WSL을 시작할 때 오류가 다시 나타날 것 같습니다.
일어나는 일은 다음과 같습니다.
Starship을 설치하면 하단에 다음 줄을 추가하라는 메시지가 표시됩니다
~/.bashrc
.eval "$(starship init bash)"
그럼 당신은재정의하다이
starship
명령은 Bash에서 다음과 같은 별칭 역할을 합니다.alias starship='vi ~/.config/starship.toml'
결과:
마지막 줄은 다음 ~/.bashrc
과 같이 해석됩니다.
eval "$(vi ~/.config/starship.toml init bash)"
해당 줄을 입력하면 동일한 오류 메시지가 표시되고 터미널이 다시 정지됩니다. 무슨 일이 일어나고 있는지 vi
Bash 명령 대체가 실행되고 있습니다. 이것은 서브쉘이다아니요대화형이므로 터미널이 연결되지 않습니다. 표준 출력(등)은 화면에 표시되지 않지만 eval
쉘('d)에 의해 캡처되고 해석됩니다.
vi
일단 얻으면 ~/.bashrc
(또는 쉘을 다시 시작하면) 실행될 것입니다. 이거 알아, 너할 수 있는다음 방법으로 복원할 수 있습니다.
Ctrl+ C Ctrl+C :qEnter:q
이는 기본적으로 Vim을 "exit" 명령( )을 받아들일 수 있는 상태로 되돌리려는 것입니다 :q. 무슨 일이 일어나고 있는지 볼 수 없더라도 Vim은 여전히 키 누르기를 처리하고 있습니다.
또 다른 복구 방법은 새 PowerShell 터미널을 시작하고 다음을 실행하는 것입니다.
wsl ~ -e bash --noprofile --norc
이렇게 하면 문제가 있는 프로세스를 처리하지 않고 WSL(및 Bash)이 시작되므로 문제가 있는 프로세스를 종료 ~/.bashrc
한 다음 프로세스를 편집하여 문제를 해결할 수 있습니다.ps auxw
vi
~/.bashrc
적어도 세 가지 잠재적인 수정 사항이 있습니다.
권장사항: 별칭을 완전히 제거하세요. 어쨌든 파일을 자주 편집하지 않을 것이기 때문에 이와 같은 별칭은 그다지 유용하지 않다는 것을 알게 될 것입니다. Linux를 사용하면 실제로 편집할 구성 파일이 수백 개는 아니더라도 수십 개가 있으므로 각 파일에 별칭을 설정하는 것은 의미가 없습니다.
별칭을 유지하려면
edit_my_prompt
기존 명령이나 유사한 명령과 충돌하지 않도록 이름을 바꾸십시오.또는 마지막 줄(Starship 호출)을 다음과 같이 변경합니다.
eval "$(command starship init bash)"
명령 앞에 넣으면
command
별칭이 무시되고starship
예상대로 실제 명령이 호출됩니다. 또한보십시오별칭으로 숨겨진 명령 실행.