設定で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/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
。標準のUbuntuをコピーまたは表示~/.bashrc
できます/etc.defaults/.bash_profile
。