如何输入名称为减号的目录?


26

我将课程下载到我的Web服务器并解压缩。

它包含一个名为的文件夹-。我以为我知道该如何处理,但我不知道。

我试过了cd -- -,但是没有达到预期的效果。使用引号似乎也没有影响。我在所有地方都放了斜线,无济于事。

更改为此文件夹的正确方法是什么?

Answers:


34

您想避免将其作为参数,因此我们尝试在其前面添加一些内容。可以使用访问当前目录.,因此-可以使用来替换子文件夹./-

cd ./-

之所以cd -- -不起作用,是因为如果将rm(请参阅man rm)与cd(请参阅man bashman cd)进行比较,则实现方式会有所不同,cd它具有不同的解释,这些解释被-视为参数(请参阅man bashman cd)。

还应注意,这cd是一个shell内置函数,可以在此答案中阅读:

cd不是外部命令-它是Shell内置函数。它在当前shell的上下文中运行,而不像外部命令那样在fork / exec的上下文中作为单独的进程运行。

有一个外部cd命令,但是它做的完全不同

这就解释了为什么实现不同的原因,因为BashCoreutils是两个不同的东西。

假设您不相信这一点,我们如何确认呢?使用whichtype

 $ which cd && type cd
which: no cd in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.7.2:/usr/games/bin
cd is a shell builtin
 $ which rm && type rm
/bin/rm
/bin/rm is /bin/rm

参见man which更多的信息,man bashman typetype


4
不,“-”在所有标准实用程序中都已实现,但旨在终止选项。单独的“-”不被识别为选项,而是先前的目录。
斯特凡Chazelas

4
正确的解决方案,但解释错误。cd内置是完全不相关的。cd -- -不起作用的原因-是操作数而不是选项。
吉尔斯(Gilles)'所以

1
在Mac OS X上,cd -- -您将转到-当前目录中命名的目录。FWIW。
肯尼迪

大多数评论都反映在我帖子的第二部分。
塔玛拉·维斯曼

22

减号(也称为破折号)本身不是选项,而是操作数(即不是选项的参数)。因此,将--其置于无效状态。破折号是中的操作数,cd -而仍然是中的操作数cd -- -。像其他标准实用程序一样,cd将操作数视为操作数,而不管其--之前是否存在。

cd命令为操作数分配特殊含义-。其他是要切换到的目录。cd -- -a切换到名为的目录-a,因为-a它不是特殊的操作数,并且--可以防止cd将其视为选项。这不能-单独解决,这不是一种选择。

用引号引起来-将无济于事,因为-无论如何它最终都会传递操作数。

因此,您唯一的办法是找到表达同一想法的另一种方法,即同一目录的另一名称。幸运的是,有一个简单的方法:如果./在相对文件名之前添加,它仍然表示相同的文件。将./确实有差别这是在我们的情况无关:CDPATH当目录名称开头没有咨询/./../。从而:

cd ./-

由于-是目录,因此另一种方法是在/其后添加一个。/在文件名的末尾添加a 可以确保将文件视为目录(特别是,如果文件是指向目录的符号链接,则该命令将对目录本身而不是对符号链接进行操作),否则没有不同。从而:

cd -- -/

-/顺便提一句,完成代码建议编写,但是在bash中它实际上只能--在它之前工作,bash并没有特殊情况cd -/(zsh可以)。


我确实尝试过cd -- -/,这真让我大吃一惊,但是由于cd -之前已经运行过等效的操作,因此该目录实际上不存在,因此我将其解释为另一次失败的尝试。
Der Hochstapler,2012年


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.