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:complete私に追加して提案された解決策を試しましたが、うまくいきません~/.bashrcでした。また、動作するposixモードをオフにしようとしましたが、.dllset +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。標準のUbuntuをコピーまたは表示~/.bashrcできます/etc.defaults/.bash_profile

関連情報