Synology DSM6의 vi 모드에서 bash 완료를 활성화하는 방법

Synology DSM6의 vi 모드에서 bash 완료를 활성화하는 방법

설정을 통해 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:completemy에 추가하여 제안된 솔루션을 시도했지만 작동 ~/.bashrc하지 않았습니다. 또한 작동하는 posix 모드를 끄려고 시도했지만 .dll set +o posix이 아닌 명령줄에서만 작동했습니다 ~/.bashrc.

그래서 bash가 기본적으로 posix 모드로 시작되는 이유를 알아내려고 합니다. 내 로그인 쉘이 (인증을 통해 ) 심볼릭 링크되어 설정되어 있는 것을 발견했습니다 /bin/sh(에서 찾을 수 있음 ). 내부에/etc/passwd/bin/bashls -l /bin/sh배쉬 매뉴얼 페이지그것은 말한다

만약에세게 때리다이름으로 전화하기, 기록 버전의 시작 동작을 모방하려고 시도합니다.POSIX 규격을 유지하면서 최대한 가깝습니다.

따라서 해결 방법은 로그인 셸을 로 변경하는 것입니다 /bin/bash. 이 작업을 수행한 후에는 더 이상 ssh를 통해 Synology에 연결할 수 없습니다. Permission denied, please try again. 이유가 무엇입니까? 확실히,ashSynology는 또는 를 제외한 다른 로그인 셸을 허용하지 않으며 shOpenSSH 바이너리로 패치하고 컴파일합니다.(왜&*#$% 그들은 이것이 현명한 아이디어라고 생각합니까?!)

그래서 뭐 할까? 제안된 해결 방법은 다음을 생성하여 새 bash세션을 시작하는 것입니다.~/.profile

if [ $0 != -bash ]; then
    exec -l bash
fi

이제 예상대로 작동합니다 set -o vi. ~/.bashrc유일한 문제는 의 기본 구성 파일이 /etc/profile더 이상 읽히지 않으므로 에서 직접 좋은 프롬프트(PS1)를 설정해야 한다는 것입니다 ~/.bashrc. 표준 우분투를 복사 ~/.bashrc하거나 볼 수 있습니다 /etc.defaults/.bash_profile.

관련 정보