2
我有我的登录脚本这样的事情,保持$ foo的在我的终端右上方的包装。它有效,但有一个警告。如果我输入一个非常长的命令,它不会换行。 (好吧,如果它超过两行,它会自动换行,但第二行覆盖第一行,如果有意义的话)。击:符合花哨的PS1,做位置echo'ing
任何人都知道如何让bash换行(即插入换行符)在$ POS ?甚至在$ 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="\[email protected]\h \W \$ \[\e[s\]\[\e[1;\$(echo -n \${POS})H\]$foo\[\e[u\]"
fi
是,+1。 ('ESC [s'是 “保存光标位置”,'ESC [; H'的 “设置光标位置” 和'ESC [u'是 “恢复光标位置”),它试图打印'$ foo'在窗口,所以'$ foo'的长度在其他地方应该被忽略跟踪输入线路上的提示是多久的目的 - 这意味着'$ foo'应该是里面的'\ [''...根据你的建议,而不是像原来那样在外面。 –
你们摇滚。 '\ [... \]'是我的问题。现在,我喜欢'$((COLUMNS - ($ {#foo})))'的更优雅的解决方案,而不是在PROMPT_COMMAND中调用函数。我很高兴和谦虚。谢谢! –
@ evil-otto - 使用您的解决方案,我将如何添加颜色?当我尝试它时弄乱包装和命令编辑。我在逃避序列地狱! –