为什么我不能在 macOS 上通过管道将 `pwd` 传送到 `open`?

Chu*_*uck 12 pipe macos

这是特定于 macOS 的,但在Ask Different社区中似乎过于单一。

在终端中,我可以pwd复制结果,然后键入open并粘贴结果,文件夹将在 Finder 中打开,但是

pwd | open
Run Code Online (Sandbox Code Playgroud)

打印open. 为什么管道不起作用但粘贴起作用?

Kus*_*nda 28

openmacOS 上的实用程序不从标准输入读取,而是从命令行获取其参数。

要打开当前工作目录,您必须说

$ open "$( pwd )"
Run Code Online (Sandbox Code Playgroud)

或者

$ open "$PWD"
Run Code Online (Sandbox Code Playgroud)

或者干脆

$ open .
Run Code Online (Sandbox Code Playgroud)

正如下面的评论所指出的。

使用该-f标志,open可以从标准输入读取,但只能打开它在默认文本编辑器中接收到的任何内容。

  • 或者您可以使用语法-`open .` 用于当前工作目录或父目录`open ..` 或两个目录`open ../..` 等等。 (5认同)

Jul*_*ier 19

我没有 Mac,因此无法对其进行测试,但解决方案应该类似于:

open "`pwd`"
Run Code Online (Sandbox Code Playgroud)

并非所有程序都接受stdin管道工作所必需的输入。

  • @tbodt:在`/var/tbodt 的文件` 中试试。 (4认同)
  • @tbodt:shell 如何知道所使用的空间是分隔参数还是参数的一部分? (2认同)
  • @jamesdlin:去抱怨`bash` 开发项目,但不要忘记在你使用它时也去 bash 所有旧的 shell 和大多数新的 shell。完了,走吧! (2认同)

ser*_*inc 9

其他答案完全正确。如果您想要一个简单的速记,您可以按照@fd0 的建议进行操作,只需使用

open .
Run Code Online (Sandbox Code Playgroud)

打开当前目录。当前目录.在 Unix 中被命名为(一个单点),即父目录..(两个点)。


小智 9

pwd | xargs open
Run Code Online (Sandbox Code Playgroud)

xargs 将其标准输入推入其第一个参数的参数中。

  • 仅当当前工作目录路径不包含空格、换行符、单引号、双引号或反斜杠时才如此。 (2认同)