MrY*_*iji 10 command-line bashrc ps1
请参阅下面我的编辑,这并不完全是Shell 提示自定义和 cmd 行为的重复
我reverse-search在 CLI 中的功能坏了,我不知道如何修复它......
当我按 ctrl+r 并搜索我之前执行的命令时,找到它然后按向右箭头键使用它,输出已损坏。下面是一个例子:
# I reverse-searched the word "test" then pressed right arrow
yoshiji@x1carbon:~/path/to/git/folder (master) $ch)`test': rake test
# ^^^^^^^^^^ weird output
# ^ cursor right there
Run Code Online (Sandbox Code Playgroud)
它还将我的光标“移动”到不同的位置。如果我按回车,就会执行正确的命令(rake test在这种情况下),所以这意味着显示的文本与实际执行的不同。
我知道这很可能与我PS1在 my 中的导出有关~/.bashrc,所以这里是这个文件的最后几行:
# Git branch in prompt.
git_branch() {
branch=$(__git_ps1 2> /dev/null)
if [ "$branch" = " (master)" ]; then
echo -e "\033[33m${branch}\033[00m" # yellow
elif [ "$branch" = "" ]; then
echo -e "\033[90m (no git)\033[00m" # red
else
echo -e "\033[32m${branch}\033[00m" # green
fi
}
PS1='\u@\h:\w$(git_branch) \$ '
Run Code Online (Sandbox Code Playgroud)
这是我写的东西,以橙色(如果master分支)或绿色(或no git灰色)显示 git 分支。
你们知道是什么导致了这种奇怪的行为吗?
编辑:这与我用来从函数返回具有颜色 + git 分支名称的字符串的方式可能重复的问题不同。使用不会转义字符和(在您的 CLI 中自己尝试:)。echo -e "some string"git_branch()echo -e\[\]echo -e "\[\033[33m\]test"
理想情况下,我想根据分支的存在和名称保留这些条件颜色(如果没有分支,则为灰色,如果主为橙色,否则为绿色)。
wja*_*rea 11
将颜色序列包装在 readline 转义中,如下所示:
echo -e "\001\033[33m\002${branch}\001\033[00m\002" # yellow
echo -e "\001\033[90m\002 (no git)\001\033[00m\002" # red
echo -e "\001\033[32m\002${branch}\001\033[00m\002" # green
Run Code Online (Sandbox Code Playgroud)
readline 转义\001位于非打印序列的开头和\002结尾。这些等同于\[和\],分别在PS1字符串。
来源:archemiro对bash 提示的回答和函数内的回显颜色_bash_帮酷编程问答
这是我在另一个问题中的答案,代码已更改。