为什么不能在MacOS上将`pwd`传递给`open`?


12

这是特定于macOS的,但似乎无法在Ask Different社区中使用。

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

pwd | open

打印的帮助文档open。为什么管道不起作用,但粘贴起作用?


仅当open期望您在按Enter键后键入目录名称时,此命令才起作用。
杰森

9
此外,这应该(不是mac用户)正常工作:(open .对于当前目录)
UniversallyUniqueID

@BharadwajRaju的open .工作原理确实很简单。ty。
Chuck

Answers:


20

我没有Mac,因此无法测试,但解决方案应为:

open "`pwd`"

并非所有程序都需要它们的输入stdin才能使管道正常工作。


1
双引号是不必要的。
tbodt '16

4
@tbodt:在中尝试/var/tbodt's files
Julie Pelletier

2
@tbodt:任何外壳程序如何知道使用的空间是分隔参数还是参数的一部分?
Julie Pelletier

2
@jamesdlin:去抱怨bash开发项目,但是别忘了在使用它的同时还要抨击所有较旧的shell和大多数较新的shell。完了,走吧!
Julie Pelletier

1
@JuliePelletier我只是说您声称它对任何贝壳都是不可能的,但是像这样的贝壳的行为恰好与tbodt描述的一样。
jamesdlin '16

28

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

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

$ open "$( pwd )"

要么

$ open "$PWD"

或简单地

$ open .

如以下评论中所指出。

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


1
如果外壳是(t)csh,则需要open $cwd:q使用。和open (pwd)/ open $PWD如果它是fish
斯特凡Chazelas

1
@StéphaneChazelas我相信Darwin上的默认外壳是bash,但是也很高兴看到其他外壳的解决方案。
库萨兰达

为了完整起见,有rcesakanga贝壳,open `pwd或者open `{pwd}
斯特凡Chazelas

5
或者,您可以open .对当前工作目录或父目录open .. 或最多两个目录使用语法- open ../..等等。
fd0

@StéphaneChazelas:为什么$cwd:q"$cwd"在csh相关的shell中更好?
G-Man说'恢复莫妮卡'

9

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

open .

打开当前目录。.在Unix中,当前目录的名称(一个点)..(父目录)(两个点)。


9
pwd | xargs open

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


2
仅当当前工作目录路径不包含空格或换行符或单引号,双引号或反斜杠时。
斯特凡Chazelas

pwd | xargs -d '\n' open
belkka

0

您可以使用管道-f来在文本编辑器中打开上一个命令的内容。这仅适用于文本编辑器。对于其他应用,您需要在其他问题中使用建议。

例如:

ls | open -f

这将打开带有ls输出内容的默认文本编辑器。

您还可以使用来指定要使用的文本编辑器-a

ls | open -a 'Atom' -f

这将使用ls输出内容打开Atom 。

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.