如何进入一个名称只有减号的目录?

如何进入一个名称只有减号的目录?

我下载了教训到我的网络服务器并解压缩它。

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

我尝试过cd -- -,但没有达到预期的效果。使用引号似乎也不影响它。我把斜线到处都是,但没有用。

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

答案1

你想避免它成为一个参数,因此我们尝试在它前面添加一些东西。可以使用 访问当前目录,因此也可以使用 访问.子文件夹。-./-

cd ./-

cd -- -不起作用的原因是因为如果您进行比较的话,其实现方式会有所不同rm(请参阅man rmcd查看man bash或者man cd),cd有不同的解释,将其-视为参数(参见man bash或者man cd)。

还应该注意的是,这cd是一个 shell 内置函数,可以在这个答案:

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

有一个外部cd命令,但它做了一些事情完全不同

这解释了为什么实现不同,因为重击核心工具是两个不同的东西。

假设您不相信这一点,我们如何证实这一点?使用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 bash或者man type为了type

答案2

单独的减号(又名破折号)不是一个选项,而是一个操作数(即不是选项的参数)。因此,放在--它前面没有任何效果。破折号是 中的操作数cd -,并且仍然是 中的操作数cd -- -。与其他标准实用程序一样,cd将操作数视为操作数,无论--其前面是否存在。

cd命令为操作数指定了特殊含义-。其他都是要切换到的目录。cd -- -a切换到名为 的目录-a,因为-a它作为操作数并不特殊,并且--会阻止cd将其视为选项。这不适用于-单独的情况,这不是一个选择。

加上引号-不会有任何帮助,因为-无论如何最终都会传递操作数。

因此,您唯一的办法就是找到表达相同想法的另一种方式,即同一目录的另一个名称。幸运的是,有一个简单的方法:如果./在相对文件名之前添加,它仍然意味着同一个文件。这./确实有所不同,这与我们的情况无关:当目录名称以,或CDPATH开头时,不会进行咨询。因此:/./../

cd ./-

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

cd -- -/

-/顺便说一句,完成代码建议编写,但在 bash 中它实际上只适用于--它之前的情况,bash 没有特殊情况cd -/(zsh 有)。

答案3

通过路径进行资格认证是一种选择。

cd ./-

答案4

这些也可以:

cd ~/'-'

或者

cd ~/"-"

相关内容