为什么 bash 不显示“bind -p”命令的结果?

为什么 bash 不显示“bind -p”命令的结果?

当我使用 -c 开关传递“bind -p”时,bash 拒绝给我提供输出:

bash -c 'bind -p'

但它可以输入

bind -p

直接在 bash 提示符下输入类似

bash -c 'echo "hi"'

并且 zsh 愉快地完成了 bash 拒绝做的事情(好吧,zsh 中的等效命令):

zsh -c 'bindkey -L'

到底发生什么事了???

答案1

当您bash使用该-c选项运行时,bash将以非交互模式运行。显然,bind当 bash 处于非交互模式时,内置命令不会生成输出。您可以bash通过提供该选项强制进入交互模式-i。以下对我有用:

bash -i -c 'bind -p'

答案2

好的,我有一个部分的输入我的问题后才发现的答案......

如果我输入

bash -c "set -o emacs && bind -p"

然后它给出了 bind 命令的输出。似乎出于某种原因,bash 没有默认的键映射,这真的很奇怪。

(我的 .bash_profile 中的某些内容出现错误 - 在 zsh 中运行正常但 bash 出现问题(显然 bash 不允许在脚本中使用“else”!?) - 所以我禁用了它,认为默认设置无论如何都会更干净。)

几乎无法想象 bash 默认不采用 vi 或 emacs 键盘映射。还是有其他我没注意到的事情?

相关内容