我想在我的提示符中引用当前目录。
如果我这样做了:
mkdir 我希望我的提示符显示,而不是打印文字换行符。我看到一些有趣的行为试图在bash 5.0.9中打印反斜杠(D3):p='\\n' && echo -E "${p@P}" # 2 slashes; output = '\n'
p='\\\\n' && echo -E "${p@P}" # 4 slashes; output = '\n'
p='\\\\\\n' && echo -E "${p@P}" # 6 slashes; output = '\\n'
p='\\\\\\\\n' && echo -E "${p@P}" # 8 slashes; output = '\\n'注:${parameter@P}的值展开的结果。parameter好像这是一个提示为什么输出与(2和4)、(6和8)斜线等价?鉴于这种混乱,和:mkdir '\\n' && cd '\\n'我无法解决如何以编程方式将\\n转换为字符串,以便在提示符中显示为:\\\\n或,以及处理文字换行符。如何在提示符中引用目录名,以便:~显示为$HOME,前导~/用于子目录。只有在需要时才会转义其他路径。显示的字符串的复制粘贴是引用当前目录的有效shell令牌。例如,"$HOME/dir with spaces"应显示为:~/dir\ with\ spaces~/~/'dir with spaces'new\nline'; cd 我希望我的提示符显示D1,而不是打印文字换行符。我看到一些有趣的行为试图在D3中打印反斜杠(D3):A4注:C5为什么输出与(2和4)、(6和8)斜线等价?鉴于这种混乱,和:A6我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。如何在提示符中引用目录名,以便:F110H111D12显示为D13,前导D14用于子目录。H215H116只有在需要时才会转义其他路径。H217H118显示的字符串的复制粘贴是引用当前目录的有效shell令牌。H219F220例如,D21应显示为:F122H123D24H225H126D27H228H129D30H231F232new\nline'我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline',而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'; cd
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232\\\\n',以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'; cd
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline',而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'; cd
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232dir with spaces'H228H129
D30
H231F232new\nline'; cd
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline',而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'; cd
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232\\\\n',以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'; cd
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline',而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'; cd
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232new\nline'
我希望我的提示符显示D1,而不是打印文字换行符。
我看到一些有趣的行为试图在D3中打印反斜杠(D3):
A4
注:C5
为什么输出与(2和4)、(6和8)斜线等价?
鉴于这种混乱,和:
A6
我无法解决如何以编程方式将D7转换为字符串,以便在提示符中显示为:D8或D9,以及处理文字换行符。
如何在提示符中引用目录名,以便:
F110H111
D12显示为D13,前导D14用于子目录。
H215H116
只有在需要时才会转义其他路径。
H217H118
显示的字符串的复制粘贴是引用当前目录的有效shell令牌。
H219F220
例如,D21应显示为:
F122H123
D24
H225H126
D27
H228H129
D30
H231F232
发布于 2019-09-24 16:21:31
如果我在提示符中包括\w,在提示符中包含cd ,那么Bash只显示提示符中的/tmp/newline。它似乎不打印文字换行符,但这也不是一个明确的输出格式。
${var@P}的目的是扩展提示符式转义,比如用户名的\u、主机名的\h和工作目录的\w,我怀疑您在这里是否需要这些。相反,引用输出的${var@Q}可能更有用吗?
设置PS1='${PWD@Q}\$ '时,如果路径更好,我将得到提示符:或'/tmp'$。另一种选择可能是PS1='$(printf "%q" "$PWD")\$ ',它在某些情况下给出了不同的引用,例如,在“好”路径的情况下不引用引号,所以/tmp$。
要将主目录显示为一个倾斜目录,一种选择是手动进行替换:
set_ppath() {
printf -v ppath "%q" "$PWD"
ppath="${ppath/$HOME/"~"}";
}
PROMPT_COMMAND=set_ppath
PS1='$ppath\$ '但是,如果其中的一部分需要引用,它仍然引用整个路径。为了解决这个问题,我想你必须一片片地走在这条路上。
不过,我不知道为什么${var@P}会像这样折叠反斜杠。
/tmp/new\nline',那么Bash只显示提示符中的D2。它似乎不打印文字换行符,但这也不是一个明确的输出格式。
D3的目的是扩展提示符式转义,比如用户名的D4、主机名的D5和工作目录的D6,我怀疑您在这里是否需要这些。相反,引用输出的D7可能更有用吗?
设置D8时,如果路径更好,我将得到提示符:D9或D10。另一种选择可能是D11,它在某些情况下给出了不同的引用,例如,在“好”路径的情况下不引用引号,所以D12。
要将主目录显示为一个倾斜目录,一种选择是手动进行替换:
A13
但是,如果其中的一部分需要引用,它仍然引用整个路径。为了解决这个问题,我想你必须一片片地走在这条路上。
不过,我不知道为什么D14会像这样折叠反斜杠。
/tmp/new\nline'$或D10。另一种选择可能是D11,它在某些情况下给出了不同的引用,例如,在“好”路径的情况下不引用引号,所以D12。
要将主目录显示为一个倾斜目录,一种选择是手动进行替换:
A13
但是,如果其中的一部分需要引用,它仍然引用整个路径。为了解决这个问题,我想你必须一片片地走在这条路上。
不过,我不知道为什么D14会像这样折叠反斜杠。
/tmp/new\nline',那么Bash只显示提示符中的D2。它似乎不打印文字换行符,但这也不是一个明确的输出格式。
D3的目的是扩展提示符式转义,比如用户名的D4、主机名的D5和工作目录的D6,我怀疑您在这里是否需要这些。相反,引用输出的D7可能更有用吗?
设置D8时,如果路径更好,我将得到提示符:D9或D10。另一种选择可能是D11,它在某些情况下给出了不同的引用,例如,在“好”路径的情况下不引用引号,所以D12。
要将主目录显示为一个倾斜目录,一种选择是手动进行替换:
A13
但是,如果其中的一部分需要引用,它仍然引用整个路径。为了解决这个问题,我想你必须一片片地走在这条路上。
不过,我不知道为什么D14会像这样折叠反斜杠。
发布于 2019-09-25 10:07:20
基于伊尔卡丘的回答,我想出如下结论:
PROMPT_COMMAND=_prompt_bash_set
_prompt_bash_set() {
# Working directory
local prefix='' # Used to contain '~' if $PWD directory is under $HOME
local dir=$PWD
# Replace leading $HOME with ~ if at beginning of string
case "$PWD"/ in # Extra slash at end prevents substring match
"$HOME"/) # $PWD == $HOME itself
prefix=\~ # no trailing /
dir='' ;;
"$HOME"/?*) # $PWD is a subdir of $HOME
prefix=\~/ # Add trailing / so that possibly quoted string goes after ~/ for path validity
dir=${PWD#$HOME/} ;; # Remove $HOME and / as this is now in $prefix
esac
if [[ $PWD != $HOME ]]; then # $PWD != $HOME
# Avoid ${PWD@Q} as it produced a literal \n inside 它将引用的目录作为$PS1中的文字文本,而不是通过变量包含。这样做的好处是,我可以继续使用目录中的彩色斜线,我的眼睛发现它更容易解析。'
printf -v dir '%q' "$dir" # Quote directory minus $HOME
# Replace a single slash with 4!?! slashes
# https://unix.stackexchange.com/q/543473/143394
dir=${dir//\\/\\\\\\\\}
# Prevent command and variable substitution:
dir=${dir//\`/\\\`} # escape ` as \`
dir=${dir//\$/\\\$} # escape $ as \$
fi
PS1='\u@\h:'$dir'\$ '
}它将引用的目录作为D1中的文字文本,而不是通过变量包含。
这样做的好处是,我可以继续使用C2,我的眼睛发现它更容易解析。
https://unix.stackexchange.com/questions/543473
复制相似问题