工作目录:PS1 的路径中可以有环境变量吗?

工作目录:PS1 的路径中可以有环境变量吗?

我在 Lubuntu 上使用 bash。我的 PS1(在 .bashrc 中)是:

PS1="\w> "

我喜欢它,因为我需要一直粘贴工作目录。问题是路径总是很长,而且由于我使用终结器,我只有一半的屏幕宽度可用于显示它……这很丑陋和烦人。我的命令提示符如下所示:

/this/is/a/very/long/path/that/i/want/to/make/shorter >

我想在我的环境变量中设置:

$tiavl=/this/is/a/very/long

然后我会得到:

$tiavl/path/that/i/want/to/make/shorter >

目标是在命令提示符中输入一些更短的内容,但我仍然希望能够复制粘贴并执行:

cd $tiavl/path/that/i/want/to/make/shorter

这有点像 $HOME :

~/path/that/i/want/to/make/shorter  >

我知道我在哪里,我可以复制粘贴~。

谢谢。

答案1

您可以使用一个小辅助函数来完成此操作,如下所示(用作/home示例前缀路径):

~ > pwd
/home/me
~ > tiavl=/home
~ > prompt_path () { echo ${1/#$tiavl/\$tiavl}; }
~ > export PS1="\$(prompt_path \w) > "
$tiavl/me > 

这使用了一个简单的字符串操作函数(参见这里$tiavl举个例子) ,如果路径匹配,则在函数中用文字替换路径的初始部分。

以下是如何针对多条路径更新该功能的演示。

#! /bin/sh

path1=/home
path2=/usr
path3=/var

prompt_path() {
    local path
    path="${1/#$path1/\$path1}"
    path="${path/#$path2/\$path2}"
    path="${path/#$path3/\$path3}"
    echo "$path"
}

prompt_path $HOME
prompt_path /usr/local
prompt_path /var/tmp

答案2

如果您在终端中复制粘贴,您只需使用 $PWD 环境变量,它将始终显示工作目录。

echo $PWD

显示工作目录。

答案3

因此基本上你要创建一个 bash 脚本:

prompt_path

其中包含 :

#! /bin/sh
path="${1/#$path1/\$path1}"
path="${path/#$path2/\$path2}"
path="${path/#$path3/\$path3}"
echo "$path"

您将其放置在如下文件夹中:

~/.local/bin

您将 x 权限授予您的脚本:

chmod u+x prompt_path

在你的 ~/.bashrc 中:

1-将 PS1 更改为:

PS1="\$(prompt_path \w) > "

2-添加以下几行:

export path1=/home
export path2=/usr
export path3=/var

3-您指出可以从任何地方调用脚本:

export PATH=~/.local/bin:$PATH

最后你获取你的 .bashrc :

. ~/.bashrc

相关内容