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 手册页:

单引号之间不能出现单引号,即使前面有反斜杠。

引用的文本$'...'可能包含反斜杠转义的引号,包括单引号和双引号。

另一种选择是将更简单的表达式添加到~/.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 回答