使用 firefox -remote 从 URL 中转义右括号

使用 firefox -remote 从 URL 中转义右括号

我有这个命令(有关详细信息,请参阅谷歌所选文本的快捷方式):

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)"'

使用 Perl:

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

相关内容