如何打印当前bash提示符?
问题很简单。我想计算bash脚本中如何打印当前bash提示符?,bash,prompt,ps1,Bash,Prompt,Ps1,问题很简单。我想计算bash脚本中PS1的当前值 google上的所有资料都指向了关于如何拉皮条的教程,但我想评估一下,看看我当前的终端,或者至少是某个终端会如何呈现它 是否有任何软件/功能可以帮助我实现这一点?当然,我希望对所有转义字符进行求值,因此,echo$PS1在我的情况下没有那么有用。编辑/etc/bashrc文件 您可以将此作为示例并检查输出 # If id command returns zero, you’ve root access. if [ $(id -u) -eq
PS1
的当前值
google上的所有资料都指向了关于如何拉皮条的教程,但我想评估一下,看看我当前的终端,或者至少是某个终端会如何呈现它
是否有任何软件/功能可以帮助我实现这一点?当然,我希望对所有转义字符进行求值,因此,
echo$PS1
在我的情况下没有那么有用。编辑/etc/bashrc文件
您可以将此作为示例并检查输出
# If id command returns zero, you’ve root access.
if [ $(id -u) -eq 0 ];
then # you are root, set red colour prompt
PS1="\\[$(tput setaf 1)\\]\\u@\\h:\\w #\\[$(tput sgr0)\\]"
else # normal
PS1="[\\u@\\h:\\w] $"
fi
还有一种可能性,使用
script
实用程序(ubuntu上bsdutils
包的一部分):
说明:
printenv <name_of_var_to_see>
尝试在终端上手动输入这些命令。将这些命令原样复制到herdoc
下,并用鼠标中键粘贴。脚本命令的stdout将包含非常类似的内容
e、 g.在上述情况下,脚本命令的输出给出:
PS1="\e[31;1m\u@\h:\n\e[0;1m$ \e[0m"; HISTFILE=/dev/null
alias some_random_string_here_that_is_not_part_of_PS1=true
some_random_string_here_that_is_not_part_of_PS1
some_random_string_here_that_is_not_part_of_PS1
\e[0m"; HISTFILE=/dev/nullhsane-dev : ~/Desktop $ PS1="\e[31;1m\u@\h:\n\e[0;1m$
anishsane@anishsane-dev:
$ alias some_random_string_here_that_is_not_part_of_PS1=true
anishsane@anishsane-dev:
$ some_random_string_here_that_is_not_part_of_PS1
anishsane@anishsane-dev:
$ some_random_string_here_that_is_not_part_of_PS1
anishsane@anishsane-dev:
$ exit
使用“some_random_string_here_that_not_part_of_PS1”作为分隔符(awk的记录分隔符)拆分该标准输出,并打印除一条记录外的最后一条记录
EDIT2:
printenv <name_of_var_to_see>
另一种机制(使用bash源代码和gdb):
$gdb-batch-p$$-ex'调用bind_变量(“扩展的_PS1”,解码_提示_字符串(获取_字符串_值(“PS1”)),0)'
$echo“$expanded_PS1”
PS1
中的\[
或\]
字符串将分别打印为\1
/\2
。您可以使用tr-d'\1\2'删除那些,请尝试以下命令
echo $PS1 |
sed -e s/'\\d'/"$(date +'%a %b %_d')"/g |
sed -e s/'\\t'/"$(date +'%T')"/g |
sed -e s/'\\@'/"$(date +'%r')"/g |
sed -e s/'\\T'/"$(date +'%r'| awk {'print $1'})"/g |
sed -e s/'\\e'//g | sed -e s/'\\h'/"$HOSTNAME"/g |
sed -e s/'\\h'/"$HOSTNAME"/g |
sed -e s/'\\H'/"$HOSTNAME"/g |
sed -e s/'\\u'/"$USER"/g |
sed -e s@'\\W'@"$(pwd)"@g |
sed -e s/'\\w'/"$(pwd | sed -e s@$HOME@'~'@g )"/g |
sed -e s/"\\\\"//g |
sed -e s/"\\["//g |
sed -e s/"\\]"/*/g |
cut -d'*' -f2 |
cut -d';' -f2 |
sed s/\ //g |
sed -e s/[a-z]$/"$([ "$USER" != "root" ] && echo \$ || echo \#)"/g
另一种方法是eval
回显您的提示以处理任何扩展(不确定括号为何保留)。这很可能不如@anishsane的方法健壮,但可能更快一些:
show-prompt() {
eval 'echo -en "'$PS1'"' | sed -e 's#\\\[##g' -e 's#\\\]##g'
}
# To show it in a function registered with `complete -F` on
# a single tab, and keep the user's input:
show-prompt
echo -n "${COMP_WORDS[@]}"
关于这一点,我已经做了修改。我会得到这样的结果:
echo $PS1
然后用编辑器编辑它。测试之后(在会话处于活动状态时设置):
(\u代表用户,\h代表主机,\w代表完整路径,\w代表短路径)
如果我喜欢,我将通过在~/.bashrc中更改PS1的值使其永久化
附言:
如果要查看所有全局变量,请执行以下操作:
printenv
或:
printenv <name_of_var_to_see>
printenv
Bash 4.4+解决方案对提示字符串使用参数转换:echo”${PS1@P}“
[adamhotep@tabasco~]$echo“提示为”${PS1@P}'"
提示是'[adamhotep@tabasco ~]$'
[adamhotep@tabasco~]$TEST\u STRING='\u正在\t使用\s\V进餐
[adamhotep@tabasco~]$echo“${TEST\u STRING}”
\u正在使用\s\V在\t用餐
[adamhotep@tabasco~]$echo“${测试_STRING@P}"
adamhotep使用Bash5.0.3在21:45:10用餐
[adamhotep@tabasco ~]$
从上的页面:
${parameter@operator}
参数转换。展开是参数值或参数本身信息的转换,具体取决于运算符的值。
每个操作员都是一个字母:
Q扩展是一个字符串,它是在
可重复用作输入的格式。
扩展是一个字符串,它是带反斜杠的参数值
转义序列与$'…'引用机制一样展开。
P扩展是一个字符串,它是扩展
参数,就好像它是提示字符串一样(请参见下面的提示)。
扩展是赋值语句或
声明命令,如果对该命令求值,将使用其
属性和价值。
扩展是一个字符串,由表示
参数的属性。
如果参数为@
或*
,则操作依次应用于每个位置参数,展开为结果列表。如果参数是一个数组变量,下标为@
或*
,则该操作将依次应用于数组的每个成员,展开为结果列表
(另请参见重复问题。)
zshell(zsh
)可以使用${(%%)PS1}
或其打印
内置的-p
标志执行此操作:
[adamhotep@tabasco~]%echo“提示为“${(%%)PS1}”
提示是'[adamhotep@tabasco ~]%'
[adamhotep@tabasco~]%print-P“提示为“$PS1”
提示是'[adamhotep@tabasco ~]%'
[adamhotep@tabasco~]%TEST\u STRING=“%n正在使用%n$ZSH\u版本在%*用餐”
[adamhotep@tabasco~]%echo“$TEST\u字符串”
%n使用%n 5.7.1在%*用餐
[adamhotep@tabasco~]%echo“${(%)测试字符串}”
adamhotep使用zsh 5.7.1在11:49:01用餐
[adamhotep@tabasco~]%打印-P“$TEST\u字符串”
adamhotep使用zsh 5.7.1在11:49:07用餐
[adamhotep@tabasco ~]%
手册告诉我们:
。如果左大括号后面紧跟着一个左括号,则匹配的右括号之前的字符串将被视为标志列表。在重复标志有意义的情况下,重复不必是连续的;例如,(q%q%q)
与可读性更高的(%qq)
的含义相同。支持以下标志:
%%
展开所有%%
以与中相同的方式在结果字中转义
提示(请参见)。如果该标志给出两次,则为full
根据结果词的不同,会对结果词进行快速扩展
设置PROMPT\u PERCENT
、PROMPT\u SUBST
和PROMPT\u BANG
选项
从以下文件中:
-p
执行提示扩展(请参阅)。与-f
结合使用时,提示转义序列仅在插入的参数内解析,而不是在
printenv
printenv <name_of_var_to_see>