我试图设置,PS1
以便它在登录后立即打印出来,但之后会换行.
假设export PS1="\h:\W \u\$ "
,第一次(即登录后)你得到:
hostname:~ username$
Run Code Online (Sandbox Code Playgroud)
我一直在尝试像我这样的东西~/.bashrc
:
function __ps1_newline_login {
if [[ -n "${PS1_NEWLINE_LOGIN-}" ]]; then
PS1_NEWLINE_LOGIN=true
else
printf '\n'
fi
}
export PS1="\$(__ps1_newline_login)\h:\W \u\$ “
Run Code Online (Sandbox Code Playgroud)
期待得到:
# <empty line>
hostname:~ username$
Run Code Online (Sandbox Code Playgroud)
从一开始就有一个完整的例子:
hostname:~ username$ ls `# notice: no empty line desired above!`
Desktop Documents
hostname:~ username$
Run Code Online (Sandbox Code Playgroud)
dog*_*ane 15
请尝试以下方法:
function __ps1_newline_login {
if [[ -z "${PS1_NEWLINE_LOGIN}" ]]; then
PS1_NEWLINE_LOGIN=true
else
printf '\n'
fi
}
PROMPT_COMMAND='__ps1_newline_login'
export PS1="\h:\W \u\$ "
Run Code Online (Sandbox Code Playgroud)
说明:
PROMPT_COMMAND
是一个特殊的bash变量,每次在设置提示之前执行. -z
标志来检查字符串的长度是否为0.使用dogbane的答案运行,您可以使PROMPT_COMMAND"自毁",从而无需在每个命令后运行函数.
在你.bashrc
或.bash_profile
文件中,做
export PS1='\h:\W \u\$ '
reset_prompt () {
PS1='\n\h:\W \u\$ '
}
PROMPT_COMMAND='(( PROMPT_CTR-- < 0 )) && {
unset PROMPT_COMMAND PROMPT_CTR
reset_prompt
}'
Run Code Online (Sandbox Code Playgroud)
处理文件时,PS1
最初在提示之前不显示换行符.但是,PROMPT_CTR
在第一次显示提示之前,会立即递减到-1(之前隐式为0).在第一个命令之后,PROMPT_COMMAND
清除自身和计数器,然后重置提示以包含换行符.随后,不会PROMPT_COMMAND
执行.
当然,有一种幸福的媒介,它不是PROMPT_COMMAND
清除自己,而只是重置为更普通的功能.就像是
export PS1='\h:\W \u\$ '
normal_prompt_cmd () {
...
}
reset_prompt () {
PS1='\n\h:\W \u\$ '
}
PROMPT_COMMAND='(( PROMPT_CTR-- < 0 )) && {
PROMPT_COMMAND=normal_prompt_cmd
reset_prompt
unset PROMPT_CTR
}'
Run Code Online (Sandbox Code Playgroud)