pwd中是否可能有bash逃逸空间?


21

我想将当前目录复制到剪贴板,例如:pwd | pbcopy。但是,pwd它不能逃脱空间,因此“应用程序支持”中的某些内容无法正确复制。我似乎不记得这种情况总是如此,所以我本来可以宽容一些。使用iTerm2。

是否有bash设置可以逃避一切?搜索时遇到麻烦,有关Spaces.app或的问题/主题过多esc

当前:

$ pwd
/Library/Application Support/Google Earth/

首选:

$ pwd
/Library/Application\ Support/Google\ Earth/

已经看过的帖子:将当前目录的路径复制到剪贴板,以及如何将CD 复制到名称包含bash中空格的目录?,但无法解决此问题。我会在前者中发表评论,但我没有特权。


1
我怀疑副本是否正确-您要粘贴的内容是空格吗-您要粘贴哪个应用程序?
user151019 2012年

好问题。您很快就会有足够的代表发表评论。欢迎光临本站!
bmike

1
pwd | pbcopy在Terminal对我来说工作正常。Finder / Edit / Show Clipboard确认没问题。
lhf 2012年

@lhf是的,应该已经在Terminal中签入了,它可以按照您所说的那样工作。不过,iTerm2并没有运气。也许我该改回去...
greenwar

这如何取决于您正在运行的终端仿真器?我刚刚测试过,并且pwd | pbcopy在iTerm2中可以正常工作。
lhf 2012年

Answers:


13

此命令将正确转义空格:

printf "%q\n" "$(pwd)" | pbcopy

您可以使用具有历史记录的东西为它加上别名,例如,cwd如果您不介意重新定义其他cwd

alias cwd='printf "%q\n" "$(pwd)" | pbcopy'

如果希望管道更像pwd一样工作,请将管道抛到pbcopy上,然后打印出转义的路径。


在Mac上不起作用
Macilias 2016年

1
在我的Mac上可以使用。
杰森·斯威特

5
pwd | sed 's/ /\\ /g'

但是我不确定这最终能解决您的问题。pbcopy完全复制它在stdin上收到的内容。


即使这只是OP所举例说明的,也只能逃避空间,这还远远不够。
老专业版

但它在多数情况下,从格伦适当一个没有我的Mac上工作了,也根本没有输出
Macilias

声明函数时,也可以将其用作别名:function escapePWD(){pwd | sed's / / \\ / g'; },并使用此别名:别名epwd = 'escapePWD'
Macilias

1

没有使pwd输出转义文件路径的内置方法,因为通常这没有用。

它没有意义的pwdpbcopy将被添加反斜杠什么被复制。如果要将路径复制到文本文件或Web帖子中,则不希望在其中插入反斜杠。

可能您想要做的是创建一个单独的别名,例如qwd,以打印当前目录的带引号的形式,或者只是转义的输出pbpaste,就像将其放在双引号中一样容易:

bash-3.2$ pwd
/Users/user
bash-3.2$ cd test\ dir/untitled\ \"folder/
bash-3.2$ pwd
/Users/user/test dir/untitled "folder
bash-3.2$ pwd | pbcopy
bash-3.2$ echo "`pbpaste`"
/Users/user/test dir/untitled "folder
bash-3.2$ cd
bash-3.2$ pwd
/Users/user
bash-3.2$ cd `pbpaste`
bash: cd: /Users/user/test: No such file or directory
bash-3.2$ cd "`pbpaste`"
bash-3.2$ pwd
/Users/user/test dir/untitled "folder

请注意,不仅需要转义空格。 向前和向后的斜杠,星号,问号,“&”号,分号和其他字符也需要转义。最安全的方法就是在示例中使用双引号,即使路径中包含双引号也可以使用。

如果您不愿意这样做,可以使AppleScript为您引用当前目录:

bash-3.2$ alias qwd="osascript -e 'return quoted form of POSIX path of (POSIX file \"./\" as alias)'"
bash-3.2$ qwd
'/Users/user/test dir/untitled "folder'

否则,我会与Glenn大致相同,但如上所述,除了将引用的格式命名为,qwd以免干扰正常pwd

alias qwd='printf "%q\n" "$(pwd)"'
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.