cd 命令 Linux 和神秘标志

cd 命令 Linux 和神秘标志

平台:CentOS 6.2外壳:tcsh

我正在研究cd一个 BASH 脚本,并注意到了奇妙的cd -选项,但留下了许多疑问……

  1. 为什么cd -?这不是和 重复吗cd ..

    编辑
    [正如 FatalError 指出的那样,这两个命令的作用不同……所以答案是“不”]

  2. -您能否像在浏览器中一样 使用标志进一步追溯历史记录?

    例如,当我输入时cd -,它会带我到上一个目录,但如果我再次输入该命令,它会带我到我刚刚进入的目录,从而形成一种循环。

    是否支持返回多个级别的简写?

    编辑
    我意识到我可以回去cd ..,但希望这可以成为通往不那么冗长的深层回去的门户,例如cd -3vs cd ../../../......希望这能澄清我所问的问题......

    编辑2
    至于目前的反馈,虽然..是一个特殊目录,但我不明白为什么终端的内置功能cd不能使用简写../../ ... ../cd ..5或者为什么内置功能不能有可以打开和使用的历史记录(例如 auto pushd/ ) 。我知道这可能存在一定的安全/隐私风险,但我认为它并不比存储命令历史记录更糟糕,大多数 shell/终端都会这样做。popdcd -3

  3. 的手册页cd可通过man cd和访问help cd(对于这两个命令都一样),仅列出-L-P标志。

    但是当我输入时,cd --help它输出Usage: cd [-plvn][-|<dir>].

    我是否正确地假设其他标志和 -(后退)选项是非标准的?

  4. -n和标志有什么-v用?

    这两个标志似乎都可以让我返回到我的主目录,这是我通过实验才弄清楚的。

快速阅读网络资源[1][2]提供的信息与手册页中提供的完全相同,但并未回答我的问题。

注意:上面声称的第二个以 Linux 为中心的资源cd只有两个选项(显然在当前情况下并非如此CentOS),因此我假设此功能可能是非标准的。

答案1

  1. cd -不同于cd ..。该cd -命令转到以前的目录。例如,如果您在 中/home/bob,然后运行cd /var/log​​,则运行cd -将带您返回到/home/bobcd ..另一方面,始终转到父目录。
  2. 如果您想保留这样的历史记录,我建议您检查一下pushdpopd允许您使用“目录堆栈”:

    user@host:/etc/init.d$ pushd /var/log
    /var/log /etc/init.d
    user@host:/var/log$ pushd /tmp
    /tmp /var/log /etc/init.d
    user@host:/tmp$ popd
    /var/log /etc/init.d
    user@host:/var/log$ popd
    /etc/init.d
    

    至于在目录树中后退多个级别,据我所知没有常用的方法。..不是 shell 的功能,它实际上是 *nix 中指向父目录的特殊目录链接。

  3. cd是内置命令,因此其标志和用法可能因 shell 而异。但一般来说,一个系统上的选项cd应该bash与另一个系统上的选项相同。

  4. 我的bashshell 没有列出这两个标志... 您正在尝试使用bash或 吗tcsh?如果您正在使用,tcsh那么您实际上是在使用一个完全不同的命令,因此您可能想要运行bashcd在那里进行操作。

编辑:

根据tcsh手册页:

使用 -p 时,打印最终目录堆栈,就像 dirs 一样。-l、-n 和 -v 标志对 cd 和 dirs 具有相同的效果,并且它们隐含 -p。

(如果您想了解具体内容,可以查看有关部分dirs。)看起来它基本上是在命令运行后打印目录堆栈:

host:43> pushd /etc/init.d
/etc/init.d ~ 
host:44> pushd /var/log
/var/log /etc/init.d ~ 
host:45> pushd /tmp
/tmp /var/log /etc/init.d ~ 
host:46> cd -p
~ /var/log /etc/init.d ~ 
host:47> cd -v
0       ~
1       /var/log
2       /etc/init.d
3       ~
host:48> popd
/var/log /etc/init.d ~ 
host:49> cd -v
0       ~
1       /etc/init.d
2       ~

两者都显示了目录堆栈,但-v似乎更容易阅读。堆栈顶部(元素 0)是当前目录,元素 1 是执行popd一次后要去的地方,依此类推。

相关内容