背景
bash的一个众所周知的功能是“别名”命令。
它允许用户通过“缩写”经常使用或烦人的类型命令并执行它们来保存击键,就好像用户自己键入了整个命令并在bash提示符下按ENTER键一样。
问题:
alias命令在用户输入别名后立即自动执行与别名对应的命令。但有时用户可能不希望出现这种行为。
问题:
在bash中有没有办法创建“填空”别名命令?这将是一个别名,在命中ENTER后不会自动运行命令,而是让用户有机会输入参数。
要避免的陷阱:
排除了反向搜索: bash的“反向搜索”功能支持这种“填空”功能请求,但它(显然)不支持允许用户提前指定命令,而只是搜索历史记录。这可能不是理想的行为。
排除函数使用bash函数可以满足此功能请求,但这可能不是理想的解决方案,因为用户可能有理由不想创建函数。
答案 0 :(得分:2)
在第二次(以及第三次和第四次)阅读时,我认为您正在寻找readline
函数alias-expand-line
。它默认不绑定任何键,但更通用的shell-expand-line
预先绑定到 Meta - Control - e 。键入命令行,然后按<而不是 Enter ,当前命令行由shell扩展,但不执行。
如果您不想完全扩展(参数,历史记录等)而只需要别名,则可以使用bind
命令绑定 Meta - Control - e (或其他一些组合键)到alias-expand-line
,它应该只扩展别名。
扩展后,您可以根据需要编辑该行,甚至可以使用 Control - x Control - e 在$EDITOR
中打开当前命令行以进行更广泛的编辑。
答案 1 :(得分:0)
排除了反向搜索
使用此选项,然后当找到正确匹配时,按 Esc 。这将允许您在运行之前编辑命令。