Linux 使用从pwd派生的动态文本编辑终端promt 短版
使用此提示获取此绿色: 这一行:Linux 使用从pwd派生的动态文本编辑终端promt 短版,linux,bash,terminal,command-prompt,Linux,Bash,Terminal,Command Prompt,使用此提示获取此绿色: 这一行: export PS1=“\w:\[$(tput setaf 2)\][绿色]\[$(tput sgr 0)\]\$” 但是在一个函数中工作,所以 my_函数(){ echo-e“\[$(tput setaf 2)\][绿色]\[$(tput sgr 0)\]” #回显“\[$(tput setaf 2)\][绿色]\[$(tput sgr 0)\]” } export PS1=“\w:\$(my\u函数)\$” 不幸的是,我得到这个提示:~/Work/te
export PS1=“\w:\[$(tput setaf 2)\][绿色]\[$(tput sgr 0)\]\$”
但是在一个函数中工作,所以
my_函数(){
echo-e“\[$(tput setaf 2)\][绿色]\[$(tput sgr 0)\]”
#回显“\[$(tput setaf 2)\][绿色]\[$(tput sgr 0)\]”
}
export PS1=“\w:\$(my\u函数)\$”
不幸的是,我得到这个提示:~/Work/temp/prompt\u test:\[\][绿色]\[\]$
*你不能用$(我的功能)
代替\$(我的功能)
-为什么?详细解释如下
详细解释
我试图满足两个条件:
条件1
我可以使用以下代码为提示添加颜色:
export PS1=“\w:$(tput setaf 2)绿色$(tput sgr 0)\$”
但是,如果我输入一个长命令,然后单击home
+end
-某个东西变得一团糟-以复制行为:
export PS1=“\w:$(tput setaf 2)绿色$(tput sgr 0)\$”
long命令,包含多个charterssssss
end
退格删除所有字符
颜色命令之前和之后添加\[
和\]
的问题:
export PS1=“\w:\[$(tput setaf 2)\]绿色\[$(tput sgr 0)\]\$”
这就解决了问题。
让我们调用“预防该问题”条件1
条件2
要让PS1行在每次目录更改时动态计算。
因此,给定以下结构(基本上是两个文件夹:mkdir蓝红色
)
两个文件夹:
+--红色
+--蓝色
然后使用一个简单的bash函数来检查pwd
是否包含blue
或red
,然后在提示符中添加颜色,这样每当我切换到带有blue
路径的文件夹时,我就会得到blue
,与red
相同
change_color2(){
本地my_pwd=$(pwd)
如果[$my_pwd=*“blue”*];则#包含“blue”的路径
回显“$(tput setaf 4)$(tput sgr 0)”
elif[$my_pwd=*“red”*];然后#包含“red”的路径
回显“$(tput setaf 1)$(tput sgr 0)”
fi
}
export PS1=“\w:\$(更改颜色2)\$”
cd红
镉蓝
请注意,如果我使用$(更改颜色2)
而不是\$(更改颜色2)
我试图同时满足这两个条件,但我不能-你能帮我吗?
多谢各位
Ubuntu 20.04
/bin/bash
正如pynexj在他的回答中提到的,解决方案是使用提示符命令
,这是在PS1之前评估的函数
所以我能做到
my_函数(){
echo-e“\[$(tput setaf 2)\][绿色]\[$(tput sgr 0)\]”
#回显“\[$(tput setaf 2)\][绿色]\[$(tput sgr 0)\]”
}
更新_PS1(){
PS1=“\w:$(my\u函数)\$”
}
PROMPT\u命令=更新\u PS1
#export PS1=“\w:\$(my\u函数)\$”
这次在update\u PS1
中,我使用的是$(我的函数)
,而不是\$(我的函数)
,但这没关系-它仍然适用于条件2,因为使用PROMPT\u命令
每次我更改新文件夹时都会对PS
变量求值。你的问题只与准编程有关,更重要“如何使用tput
?”和“如何修改Linux提示符?”也就是说,当在提示符中包含控制字符时,转义字符无法准确计数,这会导致错误的内部提示符长度,这解释了[Home]和[End]以及[Backspace]的原因未能正确清除该命令。您可能会在或..@DavidC.Rankin上得到更多的响应-我将在那里尝试,谢谢。这也是一个很好的例子,说明了为什么如果您使用printf
进行输出,您不必担心处理控制代码的选项:)
@DavidC.Rankin我不明白-如何使用de>printf
在给出的示例中,使用echo
必须告诉它使用echo-e
处理转义,默认情况下,printf
以其格式字符串处理转义。