由于bash功能导致MC启动时间长

由于bash功能导致MC启动时间长

我有下一个bash函数来确保命令后换行:

user at terra in ~
$ echo "m"
m
user at terra in ~
$ echo -n "m"
m↵

函数本身在 a 中.bashrc

function prompt_command {
    # get cursor position and add new line if we're not in first column
    echo -en "\033[6n" && read -sdR CURPOS
    [[ ${CURPOS##*;} -gt 1 ]] && echo "$(tput setab 1)↵$prompt_reset"
}
PROMPT_COMMAND=prompt_command

当我PROMPT_COMMAND设置时 - MC 从 10 到 30 秒开始,但当评论时 - 几乎立即开始。

为什么会出现这种情况?如何在不禁用此问题的情况下解决此问题?

strace,最好看看周围13:59:06,那里有9秒的延迟……(正常strace用于比较)

答案1

据我了解,它正在等待来自标准输入的输入。

`3021  13:58:57 read(0,  <unfinished ...>
3019  13:59:06 <... select resumed> )   = 0 (Timeout)`

你需要找到它在做什么。不过我的猜测是:

read -sdR CURPOS

您可以删除它read以尝试解决问题或更改其超时

答案2

MC 在终端中运行 bash。它将TERM设置为与 MC 运行所在的终端相同的值,但它似乎缓冲或过滤了下级 shell 和终端之间的一些交换。

当 bash 作为 MC 的直接子进程运行时,您可能希望使用不同的自定义。由于 MC 的劣质 shell 仅显示提示行,因此不必担心光标位置:只需系统地添加换行符即可。

if [[ "$(ps -o comm= -p $PPID)" == "mc" ]]; then
  PS1=$'\n'$PS1
else
  function prompt_command {
    # get cursor position and add new line if we're not in first column
    echo -en "\033[6n" && read -sdR CURPOS
    [[ ${CURPOS##*;} -gt 1 ]] && echo "$(tput setab 1)↵$prompt_reset"
  }
  PROMPT_COMMAND=prompt_command
fi

相关内容