我有这个命令(有关详细信息,请参阅谷歌所选文本的快捷方式):
sh -c 'firefox -remote "openURL(http://www.google.com/search?q=$(xsel),new-tab)"'
但是,当我选择以其结尾的文本时,)
会将其解析为右括号。
有解决方法吗? (比如以某种方式逃避它?)
答案1
您需要对返回的字符串进行 URL 编码xsel
。 使用Python:
sh -c 'firefox -remote "openURL(http://www.google.com/search?q=$(python -c "import urllib, sys; print urllib.quote(sys.argv[1])" "$(xsel)"),new-tab)"'
sh -c 'firefox -remote "openURL(http://www.google.com/search?q=$(perl -MURI::Escape -e '\''print uri_escape($ARGV[0]);'\'' "$(xsel)"),new-tab)"'
解释
观察当我们要求firefox
执行 google 搜索时会发生什么foo()
:
$ firefox -remote 'openURL(http://www.google.com/search?q=Foo(),new-tab)'
Error: Failed to send command: 500 command not parseable
为了使其“可解析”,我们需要对字符进行 URL 编码。例如,Foo()
编码后的样子如下:
$ python -c "import urllib, sys; print urllib.quote(sys.argv[1])" "Foo()"
Foo%28%29