如何将带有多个引号/特殊字符的行回显到文件中?

use*_*139 9 linux bash shell echo

我试图将以下行回应到.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"回声......"在我的其余部分中工作得很好.

有任何想法吗?

che*_*ner 6

试试这个

sudo su -c $'echo \"bind \'\"\\e[A\": history-search-backward\'\" >> /etc/profile\' -'
Run Code Online (Sandbox Code Playgroud)

从bash手册页:

单引号之间可能不会出现单引号,即使前面有反斜杠也是如此.

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

另一个选择是添加一个更简单的表达式~/.inputrc:

echo '"\e[A": history-search-backward' >> ~/.inputrc
Run Code Online (Sandbox Code Playgroud)

.inputrc所有用户似乎都没有读取系统范围的等价物.此外,这使得密钥绑定可用于任何使用readline的程序.如果您确实想将其限制为bash,请添加条件表达式:

cat >> ~/.inputrc <<'EOF'
$if Bash
"\e[A": history-search-backward
$endif
EOF
Run Code Online (Sandbox Code Playgroud)