是否可以在 shell 提示符中显示当前工作目录的名称?
我在 /srv/... 下的多个项目中使用 OSX 和 CentOS 进行工作,并且很快就犯了错误目录的错误。
我想拥有
[current_path] 在我的提示中不知何故,也许是彩色的,这可能吗?
例如像 /srv/myproject 它会给出提示 [root@server [myproject]# 即使在 /srv/myproject/app/etc 中这也应该保持不变
答案1
这应该接近您正在寻找的内容:
PS1="\$([[ \$PWD == /srv/*/* ]] && p=\${PWD#/*/} && p=[\${p%%/*}]; echo -n \"\$p$ \" )"
为了测试,请使用以下命令显示完整目录以及截断的目录以供比较:
PS1="\$([[ \$PWD == /srv/*/* ]] && p=\${PWD#/*/} && p=[\${p%%/*}]; echo -n \"[\$PWD] \$p$ \" )"
转义符使变量扩展被推迟到发出提示时。参数扩展会剥离第一级目录和第二级以下的所有目录级别。
您可能需要:
shopt -s promptvars
但我认为这是默认的。
仅当您位于以下目录中时,提示才会起作用/srv
这是添加一些颜色的一种方法。它使项目名称变成青色。
PS1="\$([[ \$PWD == /srv/*/* ]] && p=\${PWD#/*/} && p='[\[\033[1;36m\]'\${p%%/*}'\[\033[0m\]]'; echo -n \"\$p$ \" )"
答案2
中完整当前工作目录的字符序列$PS1
为\w
。请参阅“提示:瞬发魔法”更多细节。
答案3
我在 Linux 系统上使用以下字符串/etc/bashrc
。在大多数默认 Bash 安装中,通常只需将大写字母“W”替换为小写字母“w”即可:
PS1="[\u@\h \w]\\$ "
得出:
[root@MDMarra /ppro/edi/0010/GOODBI/receive/archive]#
代替:
[root@MDMarra archive]#