私のログインスクリプトには、端末の右上に $foo を保持するこのようなものがあります。動作しますが、注意が必要です。非常に長いコマンドを入力すると、折り返されません。(まあ、それが 2 行を超える場合は折り返されますが、それが理にかなっていれば、2 行目が 1 行目を上書きします。)
$POS で bash をラップする (改行を挿入する) 方法を知っている人はいますか? それとも $COLUMNS でさえ?
trunc_pwd () { # See http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x783.html
local pwdmaxlen=50 # Number of $PWD chars to keep
local trunc_symbol="<" # Prepend to truncated $PWD
if (( ${#PWD} > $pwdmaxlen )); then
local pwdoffset=$(( ${#PWD} - $pwdmaxlen ))
echo "${trunc_symbol}${PWD:$pwdoffset:$pwdmaxlen}"
else
echo ${PWD} | sed "s%^${HOME}%~%g"
fi
}
foo="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
get_pos ()
{
POS=$((COLUMNS-(${#foo}+4)))
}
if [[ ${PS1} ]]; then
PROMPT_COMMAND='get_pos ; echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:$(trunc_pwd)"; echo -ne "\007"'
export PS1="\u@\h \W \$ \[\e[s\]\[\e[1;\$(echo -n \${POS})H\]$foo\[\e[u\]"
fi