bash
コマンドの後に改行を保証する次の関数があります。
user at terra in ~
$ echo "m"
m
user at terra in ~
$ echo -n "m"
m↵
関数自体は次のとおりです.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を実行します。 MCは実行中の端末と同じ値に設定されますが、TERM
サブシェルと端末間の一部の交換をバッファリングまたはフィルタリングしているようです。
Bash が MC の直系サブプロセスとして実行されている場合は、別のカスタマイズを使用したい場合があります。 MCの粗いシェルはプロンプト行だけを表示するので、カーソル位置について心配する必要はありません。体系的に改行を追加するだけです。
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