9

次の行を .profile にエコーしようとしていますが、多くの引用符または特殊文字によって混乱し続けています。

bind '"e[A": history-search-backward'

ありとあらゆることを試してきましたが、うまくいきません。

これは私が現在持っているものです:

sudo su -c 'echo "bind \'\"\\e[A\": history-search-backward\'" >> /etc/profile' -

これはそれが返すものです:

su: user '"\e[A": does not exist

しかし、私が単に使用する場合:

echo bind \'\"\\e[A\": history-search-backward\'" >> /home/user/testfile

それはうまく動作します。

スクリプトの残りの部分には、あらゆる種類の「sudo su -c "echo blah ..." があり、問題なく動作します。

何か案は?

4

2 に答える 2

6

これを試して

sudo su -c $'echo \"bind \'\"\\e[A\": history-search-backward\'\" >> /etc/profile\' -'

bash の man ページから:

バックスラッシュが前にある場合でも、単一引用符の間に単一引用符が出現しない場合があります。

テキスト quoted by に$'...'は、バックスラッシュでエスケープされた一重引用符と二重引用符の両方を含めることができます。

別のオプションは、より単純な式を に追加すること~/.inputrcです。

echo '"\e[A": history-search-backward' >> ~/.inputrc

.inputrcすべてのユーザーが読み取るシステム全体に相当するものはないようです。また、これにより、readline を使用するすべてのプログラムでキーバインドが利用できるようになります。本当に bash に制限したい場合は、条件式を追加します。

cat >> ~/.inputrc <<'EOF'
$if Bash
"\e[A": history-search-backward
$endif
EOF
于 2012-08-16T20:19:56.123 に答える
0
于 2012-08-16T21:17:06.303 に答える