Bash - "/" 是一个目录

Ism*_*uel 3 bash alias

这真是令人费解...

我目前有一台 Debian 8 计算机,我使用 PuTTY (SSH) 连接到它。
使用的默认控制台是 Bash。

当我尝试将路径传递给别名时,会出现以下错误:

 -bash: /: Is a directory
Run Code Online (Sandbox Code Playgroud)

下面是一个例子:

油灰

此外,还有一个奇怪的行为:运行'/'"/"导致相同的错误,就好像 Bash 忽略了引号。


如果重要的话,别名explorer定义如下:

alias explorer='pcmanfm 1>/dev/null 2>&1 &'
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?
如果没有,我做错了什么?

Ste*_*ris 14

您编写别名的方式,您运行的命令将扩展为

pcmanfm 1>/dev/null 2>&1 & '/'
Run Code Online (Sandbox Code Playgroud)

这将在pcmanfm没有任何选项的情况下作为后台作业运行,然后尝试/作为命令运行。

你可能想要一个函数而不是别名

explorer() { pcmanfm "$@" >/dev/null 2>&1 & }
Run Code Online (Sandbox Code Playgroud)

  • @IsmaelMiguel 引号无关紧要。关键是 `&` 是一个 [列表终止符](http://unix.stackexchange.com/a/159514/22222),所以 bash 将下一项(无论是什么)作为命令读取。 (10认同)
  • @IsmaelMiguel 不,`'rm -rf /'` 尝试运行包含 8 个字符的命令。极不可能有这样的命令,所以它会失败。另一方面,`'rm' '-rf' '/'` 将成功运行带有(尝试)删除整个文件系统的指令的 `rm` 命令。 (4认同)
  • `'/foo/bar/baz'` 将尝试运行命令;这里的引号无关紧要。 (2认同)