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


17

如果我在深层目录中,可以说:

~/Desktop/Dropbox/School/2017/C/A3/

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

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

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

bob@bob-ubuntu: A3/$

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

Answers:


12

您需要PS1在shell启动文件中进行修改(可能是.bashrc)。

如果已经存在,则其设置将包含\w,这将为您提供工作目录。将其更改为\W(大写)。注销并再次登录,或执行以下操作:

. .bashrc

(或任何文件)。

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

PS1='\u@\h: \W:\$'

.bashrc或什么的。PS1bash手册页中查找以获取更多想法。

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



3

假设您使用的是bash,请更改提示字符串(变量PS1),使其\W改为\w

例如,如果您的PS1当前为\u@\h:\w\$,请将其设置为\u@\h:\W\$

要使其永久存在,您将必须在bash启动文件(例如~/.bash_profile或)中对其进行更改~/.bashrc

查看man bash并搜索PROMPTING完整的详细信息以及反斜杠转义的特殊字符列表。


我有4次提及PS1,是否要全部更改4个?
K Split X

4提哪里?在〜/ .bash_profile中?将\wPS1中的所有实例更改为都应该没有害处\W。或者您可以将提示设置为脚本底部的任意内容。
cas

1

在这种情况下,您将必须编辑PS1

在的基础上\w,您将具有显示缩短路径的命令或变量:

原始PS1

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$'

更改为

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]${PWD##*/}\[\033[00m\]\$'

请注意,如果您位于主目录中,这会将用户名替换为〜!

为了避免这种情况,您需要使用$ {PWD ## * /}的一些命令,例如

if [[ "${PWD}" == "${HOME}" ]] ; then printf \~; else echo -n ${PWD##*/}; fi

新的PS1将如下所示

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]`if [[ "${PWD}" == "${HOME}" ]] ; then printf \~; else echo -n ${PWD##*/}; fi`\[\033[00m\]\$'

糟糕, 当我试图拯救世界时,我没有想法|放弃了\ W


1

这对所有sh外壳都是可移植的。

PS1在您的Shell启动文件之一中分配给:

PS1='${PWD##*/} $ '

提示看起来像

dir $

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

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

单引号防止外壳程序在赋值时评估变量替换($PS1每次显示提示时都会评估的值)。

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.