我正在尝试绑定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 活动的双引号。您需要转义双引号以使其处于非活动状态。因此\\\"
。