调用 bind -x 命令后刷新 bash 提示符
Refreshing bash prompt after calling bind -x command
我有一个 bash 函数可以更改当前 bash 会话的目录。我想通过按 Alt-M 调用该函数,并使用 bind -x
创建此映射。在我的键盘上输入 Alt-M 后,在我的 bash 提示符中没有任何反应 - 没有换行符,如果键入一个函数然后按 Enter 键就会有换行符。我必须再次按 Enter 才能在新行上获得新提示。
如何强制在新行上出现新提示?如果我调用函数 directly/normally(即通过键入 foo
然后按回车键),该命令将按预期工作并且将在新行上出现 bash 提示,并刷新PS1.
在函数中使用 echo
或 printf
命令不起作用 - 它打印一个新行,但在 bash 提示符和 bash 提示符之上不刷新。这里到底发生了什么我不想发生的事情?
foo(){
dir="/some/path"
cd $dir
}
bind -x '"\em": foo'
如果您使用宏而不是 shell 函数,您可以注入 return 按键:
bind '"\em": "\C-ex\C-u foo\C-m\C-y\C-b\C-d"'
\C-e
移动到行尾
x
追加内容以确保行不为空
\C-u
删除行保存在kill ring
foo
是命令 - 前导 space 阻止它被添加到历史记录中(假设 HISTCONTROL=ignorespace
)
\C-m
注入 return 按键
\C-y
恢复原行
\C-b\C-d
删除我们添加的无关 x
如果光标不在行尾,我不知道如何将光标移回原来的位置。杀伤环也被污染了。
我有一个 bash 函数可以更改当前 bash 会话的目录。我想通过按 Alt-M 调用该函数,并使用 bind -x
创建此映射。在我的键盘上输入 Alt-M 后,在我的 bash 提示符中没有任何反应 - 没有换行符,如果键入一个函数然后按 Enter 键就会有换行符。我必须再次按 Enter 才能在新行上获得新提示。
如何强制在新行上出现新提示?如果我调用函数 directly/normally(即通过键入 foo
然后按回车键),该命令将按预期工作并且将在新行上出现 bash 提示,并刷新PS1.
在函数中使用 echo
或 printf
命令不起作用 - 它打印一个新行,但在 bash 提示符和 bash 提示符之上不刷新。这里到底发生了什么我不想发生的事情?
foo(){
dir="/some/path"
cd $dir
}
bind -x '"\em": foo'
如果您使用宏而不是 shell 函数,您可以注入 return 按键:
bind '"\em": "\C-ex\C-u foo\C-m\C-y\C-b\C-d"'
\C-e
移动到行尾x
追加内容以确保行不为空\C-u
删除行保存在kill ringfoo
是命令 - 前导 space 阻止它被添加到历史记录中(假设HISTCONTROL=ignorespace
)\C-m
注入 return 按键\C-y
恢复原行\C-b\C-d
删除我们添加的无关x
如果光标不在行尾,我不知道如何将光标移回原来的位置。杀伤环也被污染了。