这是对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上出现的问题。
感谢您对此的帮助,顺便说一句,事实证明,经过这么多年,我不得不最终编写我的第一个堆栈溢出帖子!
答案 0 :(得分:1)
从评论中复制:链接的答案专门要求适用于粘贴的转义PWD,但是您需要一个程序输入,其中转义会适得其反。只需pwd | pbcopy
和cd "$(pbpaste)"
。
修改强>
(说实话,我认为你需要明确地转义它,因为这就是我用pwd创建一个带空格的目录。)
问题是命令行解析器只执行一次unescaping传递。在cd foo\ bar
的情况下,空间未转义。在cd $(pbpaste)
的情况下,没有什么是不可见的;然后将pbpaste
的文字输出放入参数列表中。