平台:CentOS 6.2
外壳:tcsh
我正在研究cd
一个 BASH 脚本,并注意到了奇妙的cd -
选项,但留下了许多疑问……
- 为什么
cd -
?这不是和 重复吗cd ..
?
编辑
[正如 FatalError 指出的那样,这两个命令的作用不同……所以答案是“不”] -
您能否像在浏览器中一样 使用标志进一步追溯历史记录?
例如,当我输入时cd -
,它会带我到上一个目录,但如果我再次输入该命令,它会带我到我刚刚进入的目录,从而形成一种循环。
是否支持返回多个级别的简写?
编辑
我意识到我可以回去cd ..
,但希望这可以成为通往不那么冗长的深层回去的门户,例如cd -3
vscd ../../../
......希望这能澄清我所问的问题......
编辑2
至于目前的反馈,虽然..
是一个特殊目录,但我不明白为什么终端的内置功能cd
不能使用简写../../ ... ../
,cd ..5
或者为什么内置功能不能有可以打开和使用的历史记录(例如 autopushd
/ ) 。我知道这可能存在一定的安全/隐私风险,但我认为它并不比存储命令历史记录更糟糕,大多数 shell/终端都会这样做。popd
cd -3
- 的手册页
cd
可通过man cd
和访问help cd
(对于这两个命令都一样),仅列出-L
和-P
标志。
但是当我输入时,cd --help
它输出Usage: cd [-plvn][-|<dir>].
。
我是否正确地假设其他标志和 -(后退)选项是非标准的? -n
和标志有什么-v
用?
这两个标志似乎都可以让我返回到我的主目录,这是我通过实验才弄清楚的。
快速阅读网络资源[1][2]提供的信息与手册页中提供的完全相同,但并未回答我的问题。
注意:上面声称的第二个以 Linux 为中心的资源cd
只有两个选项(显然在当前情况下并非如此CentOS
),因此我假设此功能可能是非标准的。
答案1
cd -
不同于cd ..
。该cd -
命令转到以前的目录。例如,如果您在 中/home/bob
,然后运行cd /var/log
,则运行cd -
将带您返回到/home/bob
。cd ..
另一方面,始终转到父目录。如果您想保留这样的历史记录,我建议您检查一下
pushd
并popd
允许您使用“目录堆栈”: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 中指向父目录的特殊目录链接。cd
是内置命令,因此其标志和用法可能因 shell 而异。但一般来说,一个系统上的选项cd
应该bash
与另一个系统上的选项相同。我的
bash
shell 没有列出这两个标志... 您正在尝试使用bash
或 吗tcsh
?如果您正在使用,tcsh
那么您实际上是在使用一个完全不同的命令,因此您可能想要运行bash
并cd
在那里进行操作。
编辑:
根据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
一次后要去的地方,依此类推。