如何 cd 进入具有此名称“-2”(以连字符开头)的目录?

use*_*851 190 linux command-line-interface

我有一个名为的目录:

-2
Run Code Online (Sandbox Code Playgroud)

我想 cd 进入它,但 cd 抱怨:

bash: cd: -2: invalid option
Run Code Online (Sandbox Code Playgroud)

没有成功,我试过:

cd "-2"
cd '-2'
cd \-2
Run Code Online (Sandbox Code Playgroud)

有什么解决办法吗?

编辑:服务器上没有可用的文件浏览器,如 mc 等。

Mic*_*ton 301

至少有两种方式:

  1. 使用--参数。

    cd -- -2
    
    Run Code Online (Sandbox Code Playgroud)

    这使用了 GNU 工具通用的约定,即不将后面出现的任何内容--视为命令行选项。

    正如评论者所指出的,该约定也在POSIX 标准中定义

    默认行为:当此部分列为“无”时,表示该实现不需要支持任何选项。不接受选项但接受操作数的标准实用程序应识别"--"为要丢弃的第一个参数。

    识别的要求"--"是因为符合要求的应用程序需要一种方法来保护它们的操作数不受实现可能作为扩展提供的任何任意选项的影响。例如,如果标准实用程序 foo 被列为不带任何选项,并且应用程序需要给它一个带前导连字符的路径名,它可以安全地这样做:

    foo -- -myfile
    
    Run Code Online (Sandbox Code Playgroud)

    并避免将-m用作扩展名的任何问题。

    以及

    准则 10:应接受
    参数--作为指示选项结束的分隔符。任何后续参数都应视为操作数,即使它们以'-'字符开头。该--参数不应该被用来作为一个选项或操作数。

  2. 明确指定路径:

    cd ./-2
    
    Run Code Online (Sandbox Code Playgroud)

    这指定了显式命名当前目录 ( .) 作为起点的路径。

    cd $(pwd)/-2
    cd /absolute/path/to/-2
    
    Run Code Online (Sandbox Code Playgroud)

    这些是上述内容的变体。任何数量的这种变化都是可能的;我将把它作为练习留给读者去发现所有这些。

  • 它不仅仅是 GNU,它还是 POSIX 标准的一部分。请参阅 [1.11 实用程序描述默认值](http://pubs.opengroup.org/onlinepubs/007904875/utilities/xcu_chap01.html#tag_01_11) 和 [12.2 实用程序语法指南](http://pubs.opengroup.org/onlinepubs/ 007904875/basedefs/xbd_chap12.html#tag_12_02)(准则#10)。从 [`cd` 页面](http://pubs.opengroup.org/onlinepubs/007904875/utilities/cd.html) “`cd` 实用程序应符合...第 12.2 节”。 (25认同)
  • @sergiol 同样的方式。 (2认同)

Tim*_*ele 53

这应该有效:

cd -- -2 
Run Code Online (Sandbox Code Playgroud)

-- 意味着没有更多选择


小智 31

如果“-2”在当前目录中,这将起作用。

    cd ./-2
Run Code Online (Sandbox Code Playgroud)

您可以通过键入 - 并按 Tab 来自动完成。


小智 12

cd /home/...../-2也有效。提供完整的访问路径。 


小智 7

补充一下,如果你想移除/删除这个目录,你可以使用以下命令:

rm -r -- -2
Run Code Online (Sandbox Code Playgroud)