linux 更行path,Linux命令行导航提示/技巧3 - CDPATH环境变量

在本系列的第一部分中,我们详细讨论了cd命令,在第二部分,我们深入研究了pushd和popd命令以及它们派上用场的场景。

继续我们对命令行导航方面的讨论,在本教程中,我们将通过简单易懂的示例来讨论CDPATH环境变量。 我们还将讨论与此变量相关的一些预先详细信息。

但在我们继续之前,值得一提的是,本教程中的所有示例都已在Ubuntu 14.04中使用Bash版本4.3.11(1)进行了测试。

CDPATH环境变量

即使您的命令行工作涉及执行特定目录下的所有操作(例如您的主目录),那么您也必须在切换目录时提供绝对路径。 例如,考虑一下我在/ home / himanshu / Downloads目录中的情况:

$ pwd

/home/himanshu/Downloads

而要求是切换到/ home / himanshu / Desktop目录。 为了做到这一点,通常我必须运行:

cd /home/himanshu/Desktop/

要么

cd ~/Desktop/

要么

cd ../Desktop/

如果我可以运行以下命令,这不容易:

cd Desktop

是的,这是可能的。 这是CDPATH环境变量所在的位置。您可以使用此变量来定义cd命令的基本目录。

如果您尝试打印其值,您将看到默认情况下,此env变量为空:

$ echo $CDPATH

$

现在,考虑到目前为止我们一直在讨论的情况,让我们使用这个环境变量来定义/ home / himanshu作为cd命令的基本目录。

最简单的方法是:

export CDPATH=/home/himanshu

现在,我可以做我以前不能做的 - 从/ home / himanshu / Downloads目录下,成功运行cd Desktop命令。

$ pwd

/home/himanshu/Downloads

$ cd Desktop/

/home/himanshu/Desktop

$

这意味着我现在可以在cd 命令中明确指定/ home / himanshu或〜或../ (或多个../ )下的/ home / himanshu下的任何目录下执行cd。

要记住的要点

所以你现在知道我们如何使用CDPATH环境变量轻松切换到/ from / home / himanshu / Downloads from / to / home / himanshu / Desktop 。 现在考虑一种情况,在/ home / himanshu / Desktop目录中包含一个名为Downloads的子目录 ,而后者则是您要切换的。

但突然间你意识到,做一个cd桌面将带你到/ home / himanshu /桌面 。 所以,为了确保不会发生,你做:

cd ./Downloads

虽然上述命令本身没有问题,但这是您的一个额外的努力(无论如何),特别是考虑到每次出现这种情况时都必须这样做。 这个问题的一个更优雅的解决方案可以是以下列方式最初设置CDPATH变量:

export CDPATH =“。:/ home / himanshu”

这意味着你告诉cd命令首先查找当前工作目录中的目录,然后尝试搜索/ home / himanshu目录。 当然,您是否希望cd命令行为完全取决于您的偏好或要求 - 我在后面讨论这一点的想法是让您知道这种情况可能会出现。

正如您现在所理解的那样,一旦设置了CDPATH env变量,它的值 - 或者它包含的路径集是系统上唯一的cd命令搜索目录的地方(除了当然的情况)你使用绝对路径)。 所以,完全取决于您确保命令的行为保持一致。

继续前进,如果有一个使用具有相对路径的cd命令的bash脚本,那么最好先清除或取消设置CDPATH环境变量,除非你被困在不可预见的问题中。 或者,不是使用终端上的export命令来设置CDPATH,您可以在测试交互式/非交互式shell之后 ,在.bashrc 文件中设置环境变量, 以确保您所做的更改仅被反映在交互式shell中。

路径出现在环境变量值中的顺序也很重要。 例如,如果当前目录在/ home / himanshu之前列出,那么cd命令将首先在当前工作目录中搜索一个目录,然后移动到/ home / himanshu 。 但是,如果值为“/ home / himanshu:” 那么第一次搜索将在/ home / himanshu中进行 ,之后是当前目录。 不用说,这将影响cd命令的作用,如果您不知道路径的顺序,可能会导致问题。

请记住,CDPATH环境变量,顾名思义,仅适用于cd命令。 这意味着在/ home / himanshu / Downloads目录下,您可以运行cd Desktop命令切换到/ home / himanshu / Desktop目录,但是不能执行ls 。 以下是一个例子:

$ pwd

/home/himanshu/Downloads

$ ls Desktop

ls: cannot access Desktop: No such file or directory

$

但是,可能会有一些简单的解决方法。 例如,我们可以通过以下方式以最小的努力实现我们想要的:

$ cd Desktop/;ls

/home/himanshu/Desktop

backup backup~ Downloads gdb.html outline~ outline.txt outline.txt~

但是,对于每一种情况可能没有解决办法。

另一重要的一点:您可能已经观察到,每当使用带有CDPATH环境变量集的cd命令时,该命令将在输出中生成要切换到的目录的完整路径。 不用说,每次在他们的机器上运行cd命令时,并不是每个人都想要有这些信息。

要确保此输出被抑制,可以使用以下命令:

alias cd='>/dev/null cd'

当cd命令成功时,上述命令将静音输出,但是将允许在命令失败时产生错误消息。

最后,如果您在设置CDPATH环境变量后遇到问题,则无法使用shell的选项卡完成功能,那么可以尝试安装并启用bash-completion。

结论

CDPATH环境变量是一把双刃剑 - 如果不谨慎和完整的知识使用,那么它可能会使您陷入一些复杂的陷阱,这可能需要大量的宝贵时间才能得到解决。 当然,这并不意味着你永远不应该试一试; 只是评估所有可用的选项,如果你得出结论,使用CDPATH将是很大的帮助,那么请继续使用它。

你一直在使用CDPATH吗? 你有更多的分享提示吗? 请在下面的评论中分享您的想法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值