我有下一个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 秒开始,但当评论时 - 几乎立即开始。
为什么会出现这种情况?如何在不禁用此问题的情况下解决此问题?
答案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