如何缩短终端上显示的当前目录路径?

K S*_*t X 44 linux terminal directory files

如果我在一个深层目录中,让我们说:

~/Desktop/Dropbox/School/2017/C/A3/
Run Code Online (Sandbox Code Playgroud)

然后当我打开终端时,它说

bob@bob-ubuntu:~/Desktop/Dropbox/School/2017/C/A3/$
Run Code Online (Sandbox Code Playgroud)

然后我写下我的命令。那很长,我在终端中写的每一行都会转到下一行。我想知道是否有办法让它只显示我的当前目录。我希望它显示:

bob@bob-ubuntu: A3/$
Run Code Online (Sandbox Code Playgroud)

这样就很清楚了,而且我总是可以pwd看到我的整个目录。我只是不希望整个目录在终端中可见,因为它占用了太多空间。

小智 69

从 bash 4 开始,通过PROMPT_DIRTRIM在.bashrc文件中使用来缩短命令行中的目录深度。请记住重新打开您的终端。

PROMPT_DIRTRIM=1
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅Bash 手册。

例子

bob@bob-ubuntu:~/Desktop/Dropbox/School/2017/C/A3/$

将被修剪为

bob@bob-ubuntu:.../A3/$

  • 这正是我一直在寻找的。在你的 `.bashrc` 中设置类似 `export PROMPT_DIRTRIM=3` 的内容是 `\W` 和 `\w` 之间的完美中间地带。请参阅:https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html (12认同)
  • 是的,这很完美。 (2认同)

Bob*_*ger 38

您需要修改PS1您的 shell 启动文件(可能是.bashrc)。

如果它已经存在,则其设置将包含\w,这就是您的工作目录的内容。将其更改为\W(大写)。bashrc文件中的行如下所示:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
Run Code Online (Sandbox Code Playgroud)

注销并重新登录,或执行以下操作:

. .bashrc
Run Code Online (Sandbox Code Playgroud)

或者(如果您在其他目录中,则需要添加此前缀“~/”)

source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

(或任何您的文件)。

如果它不存在,请添加如下内容:

PS1='\u@\h: \W:\$'
Run Code Online (Sandbox Code Playgroud)

到.bashrc或什么。PS1在bash手册页中查找以获得更多想法。

当心; bash可以使用多个以上的初始化文件,例如.bashrc和.bash_profile;可能PS1是在系统范围内设置的。但是您可以在您自己的文件之一中覆盖它。


Kus*_*nda 6

这对于所有shshell 都是可移植的。

分配给PS1您的 shell 启动文件之一:

PS1='${PWD##*/} $ '
Run Code Online (Sandbox Code Playgroud)

提示将类似于

dir $
Run Code Online (Sandbox Code Playgroud)

其中dir是当前目录的基本名称。

该$PWD变量包含当前目录路径,${PWD##*/}并将删除该路径中直到并包括最后一个的所有内容/。

单引号可防止 shell 形式在赋值时评估变量替换($PS1每次显示提示时都会评估 的值)。

PS1不应导出该变量,因为它仅由当前 shell 使用。