Bash `sleep` 输出 __bp_preexec_invoke_exec

Bash `sleep` 输出 __bp_preexec_invoke_exec

背景

我正在运行一个更大的单行命令。它意外地输出(每次迭代两次)以下内容:

__bp_preexec_invoke_exec“$_”

这是精简后的命令(删除了循环中的其他活动):

for i in `seq 1 3`; do sleep .1 ; done

注意:在我玩过几次之后,它莫名其妙地停止打印意外的输出

我尝试过的

  • 如果我删除,sleep .5我不会得到意外的输出
  • 如果我只是运行sleep .5提示返回但没有输出
  • 我已经用谷歌搜索过__bp_preexec_invoke_exec,但我无法确定它如何应用于我正在做的事情

问题

什么是__bp_preexec_invoke_exec“$_”?

我怎样才能运行它而不产生不需要的输出?


有关解决方案的更多信息,感谢@gina2x:

这是输出declare -f | grep preexec

    preexec_functions+=(preexec);
    __bp_preexec_interactive_mode="on"
__bp_preexec_invoke_exec ()
    if [[ -z "$__bp_preexec_interactive_mode" ]]; then
            __bp_preexec_interactive_mode="";
        __bp_preexec_interactive_mode="";
    local preexec_function;
    local preexec_ret_value=0;
    for preexec_function in "${preexec_functions[@]}";
        if type -t "$preexec_function" > /dev/null; then
            $preexec_function "$this_command";
            preexec_ret_value="$?";
    __bp_set_ret_value "$preexec_ret_value" "$__bp_last_argument_prev_command"
    if [[ -z "${iterm2_ran_preexec:-}" ]]; then
        __iterm2_preexec "";
    iterm2_ran_preexec="";
__iterm2_preexec ()
    iterm2_ran_preexec="yes";

我在那里看到很多“iterm2”信息(我在 Mac 上并使用 iTerm2.app)。

事实上,当我尝试使用 Terminal.app 进行重现时,我无法重现意外的输出

出色的侦查declare -f- 谢谢!

答案1

似乎__bp_preexec_invoke_exec是的一部分https://github.com/rcaloras/bash-preexec/blob/master/bash-preexec.sh。该脚本中似乎存在错误。

该项目通过添加 DEBUG 陷阱向 bash 添加了“preexec”功能,我没有测试,但我可以想象它可能无法按照您所看到的方式正常工作。检查它是否安装在您的环境中 - 您可以通过以下方式执行此操作declare -f。似乎使用较新的 bash,您可以使用 PS0 而不是该项目,这可能会执行相同的操作,而不会出现您看到的问题。

答案2

将数据从旧笔记本电脑迁移到新笔记本电脑时遇到问题。__bp_preexec_invoke_exec其他一些是在文件中定义并源自 ~/.iterm2_shell_integration.bash文件。

就我而言,定义已经过时,因此产生了噪音。按照以下链接中的说明下载最新版本: https://iterm2.com/documentation-shell-integration.html

相关内容