설정을 통해 bash에서 갑자기 vi 모드를 켜면 set -o vi
탭 완성이 깨지고 리터럴 탭 문자가 삽입됩니다. 이 문제를 어떻게 해결하나요?
답변1
긴 이야기 짧게~/.profile
생성하여 해결
if [ $0 != -bash ]; then
exec -l bash
fi
긴 버전:
잠시 검색한 후 DSM6에서 bash가 posix 모드( 유효성 검사 사용 set -o
)에서 실행되고 탭 완성이 posix 모드의 vi 모드에서 작동하지 않는다는 것을 발견했습니다(Posix 모드에서 bash 완료). bind TAB:complete
my에 추가하여 제안된 솔루션을 시도했지만 작동 ~/.bashrc
하지 않았습니다. 또한 작동하는 posix 모드를 끄려고 시도했지만 .dll set +o posix
이 아닌 명령줄에서만 작동했습니다 ~/.bashrc
.
그래서 bash가 기본적으로 posix 모드로 시작되는 이유를 알아내려고 합니다. 내 로그인 쉘이 (인증을 통해 ) 심볼릭 링크되어 설정되어 있는 것을 발견했습니다 /bin/sh
(에서 찾을 수 있음 ). 내부에/etc/passwd
/bin/bash
ls -l /bin/sh
배쉬 매뉴얼 페이지그것은 말한다
만약에세게 때리다이름으로 전화하기쉿, 기록 버전의 시작 동작을 모방하려고 시도합니다.쉿POSIX 규격을 유지하면서 최대한 가깝습니다.
따라서 해결 방법은 로그인 셸을 로 변경하는 것입니다 /bin/bash
. 이 작업을 수행한 후에는 더 이상 ssh를 통해 Synology에 연결할 수 없습니다. Permission denied, please try again.
이유가 무엇입니까? 확실히,ash
Synology는 또는 를 제외한 다른 로그인 셸을 허용하지 않으며 sh
OpenSSH 바이너리로 패치하고 컴파일합니다.(왜&*#$% 그들은 이것이 현명한 아이디어라고 생각합니까?!)
그래서 뭐 할까? 제안된 해결 방법은 다음을 생성하여 새 bash
세션을 시작하는 것입니다.~/.profile
if [ $0 != -bash ]; then
exec -l bash
fi
이제 예상대로 작동합니다 set -o vi
. ~/.bashrc
유일한 문제는 의 기본 구성 파일이 /etc/profile
더 이상 읽히지 않으므로 에서 직접 좋은 프롬프트(PS1)를 설정해야 한다는 것입니다 ~/.bashrc
. 표준 우분투를 복사 ~/.bashrc
하거나 볼 수 있습니다 /etc.defaults/.bash_profile
.