Escape os parênteses de fechamento da URL com o firefox -remote

3

Eu tenho este comando (para informações detalhadas, consulte Atalho para o texto selecionado do Google ):

sh -c 'firefox -remote "openURL(http://www.google.com/search?q=$(xsel),new-tab)"'

Mas quando seleciono um texto que termina com ) , ele é analisado como um parêntese de fechamento.

Existe uma solução alternativa para isso? (como escapar de alguma forma?)

    
por user2692669 07.08.2014 / 01:39

1 resposta

4

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

Usando o Perl :

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
    
por 07.08.2014 / 02:11