我已经让我的 .bashrc 给我两种类型的提示;
longp:xanth@X-VboxTux:~➤➤➤
和
简写:➤
我通过向文件写入 0 或 1 来完成此操作,然后确定应显示什么提示,如果否则树位于 PS1 行中。
所以我的问题是...有没有比将 0 或 1 写入文件更好的方法来存储状态?
代码;
bashrcpl=$(<.bashrcpl)
if [ $bashrcpl = "0" ] || [ "$(whoami)" = root ]; then
if [ "$color_prompt" = yes ]; then
if [ "$(whoami)" = root ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[0;31m\]\u\[\033[0;32m\]@\[\033[0;36m\]\h\[\033[0;32m\]:\[\033[01;34m\]\w\[\033[0;31m\]➤\[\033[1;31m\]➤\[\033[0;32m\]➤\[\033[01;34m\] '
else
PS1='${debian_chroot:+($debian_chroot)}\[\033[1;31m\]\u\[\033[0;32m\]@\[\033[0;36m\]\h\[\033[0;32m\]:\[\033[01;34m\]\w\[\033[0;31m\]➤\[\033[1;31m\]➤\[\033[0;32m\]➤\[\033[01;34m\] '
fi
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
else
PS1='${debian_chroot:+($debian_chroot)}\[\033[0;32m\]➤\[\033[01;34m\] '
fi
# Alias to turn short terminal prompt on or off
alias shortp='echo "1" > .bashrcpl & source ~/.bashrc &> /dev/null'
alias longp='echo "0" > .bashrcpl & source ~/.bashrc &> /dev/null'
答案1
这个设置应该有多持久?
如果您希望它在 bash 重新启动和重启后仍然能够保留,那么您必须将其提交到磁盘,因此您的基于文件的解决方案还不错。
如果您可以接受某些默认设置(例如,始终以长提示开始,但能够切换到短提示),那么您可以稍微修改一下逻辑:在 .bashrc/.bash_profile 中将某些变量(例如 $MY_PROMPT_TYPE)设置为默认值,将 COMMAND_PROMPT 变量(每次 bash 显示提示时都会对其进行评估)设置为根据 $MY_PROMPT_TYPE 变量的当前值设置 PS1,并定义两个别名来切换 MY_PROMPT_TYPE。
为了满足您的持久性要求,您可以在每次切换时将 PROMPT_TYPE 变量的新默认值提交给 .bashrc/.bash_profile,类似于您已经执行的操作,但无需重新读取 .bashrc——您的 COMMAND_PROMPT 将为您动态更改 PS1。
TL;DR:将您的“if/else/fi”移至 COMMAND_PROMPT,将您的 .bashrcpl 移至 .bashrc/.bash_profile 中的 MY_PROMPT_TYPE,重写切换别名。