0

这是对https://apple.stackexchange.com/questions/52459/的跟进,是关于 bash 中的意外行为。总结该链接中的内容,问题是将终端中的当前目录复制到一个临时变量,例如粘贴板,然后使用它在不同的终端窗口中切换目录。那里提供的解决方案几乎以最有效的方式解决了它!但是,当我实际尝试使用具有正确转义目录名称的临时变量更改目录时,它似乎在 bash 中无法正常工作。

我的最小工作示例如下:

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

现在在终端中:

>$ mkdir tmp
>$ cd tmp
>$ mkdir test\ dir
>$ cd test\ dir
>$ cwd | pbcopy

在新终端中:

>$ echo "$(pbpaste)"
/Users/foo/tmp/test\ dir/
>$ cd $(pbpaste)
-bash: cd: /Users/kaushik/tmp/test\: No such file or directory
>$ cd "$(pbpaste)"
-bash: cd: /Users/kaushik/tmp/test\ dir/: No such file or directory

我很难弄清楚我做错了什么。我唯一确定的是,这是一个 bash 问题,而不是 OS X 上出现的问题。

感谢您在这方面的帮助,顺便说一句,事实证明,经过这么多年,我最终不得不写下我的第一个堆栈溢出帖子!

4

1 回答 1

1

从评论中复制:链接的答案专门要求适合粘贴的转义 PWD,但您需要一个程序化输入,其中转义会适得其反。只是做pwd | pbcopycd "$(pbpaste)"

编辑:

(老实说,我认为您需要明确转义它,因为这就是我使用 pwd 创建带有空格的目录的方式。)

问题是命令行解析器只执行一次转义。在 的情况下cd foo\ bar,该空间未转义。在 的情况下cd $(pbpaste),没有什么可以逃避的;thenpbpaste的文字输出被放入参数列表中。

于 2015-04-09T05:32:32.110 回答