Você precisa fazer a codificação de URL na string retornada por xsel
. Usando 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)"'
Explicação
Observe o que acontece quando pedimos a firefox
para realizar uma pesquisa no google em foo()
:
$ firefox -remote 'openURL(http://www.google.com/search?q=Foo(),new-tab)'
Error: Failed to send command: 500 command not parseable
Para torná-lo "parseable", precisamos codificar os caracteres com URL. Por exemplo, aqui está a aparência do Foo()
quando codificado:
$ python -c "import urllib, sys; print urllib.quote(sys.argv[1])" "Foo()"
Foo%28%29