使用转义双引号绑定到字符串

使用转义双引号绑定到字符串

我正在尝试绑定Alt-s到一个非常复杂并且需要嵌套双引号的 SSH 命令。

bind '"\es":"ssh -t me@myserver  \"echo \\"hi\\"; echo \\"bye\\"\""'

但是当我执行键绑定时,字符串的一半被截断:

ssh -t me@myserver  "echo \"hi\";

如何插入整个字符串?我不知道这是分号后面的空格问题,还是双引号的所有双重转义问题。

笔记:我不想使用bind -x样式,因为 a) 不会打印实际命令 b) 执行它时无法在按 Enter 执行之前手动修改该行。

答案1

转义 shell 字符串是很棘手的。尝试:

bind '"\es":"ssh -t localhost  \"echo \\\"hi\\\"; echo \\\"bye\\\"\""'

执行上述命令后,按 Esc-s 应该会在命令行上显示以下文本:

ssh -t localhost  "echo \"hi\"; echo \"bye\""

这将正常工作。执行时,它会产生输出:

hi
bye
Connection to localhost closed.

问题在于它\\"被解释为单个反斜杠后跟 shell 活动的双引号。您需要转义双引号以使其处于非活动状态。因此\\\"

相关内容