Como escapar texto no comando awful.util.spawn_with_shell?

1

Com base em uma sugestão , agora recebi a seguinte chamada em rc.lua :

awful.util.spawn_with_shell('vlc $(xclip -o)')

Como posso garantir que a saída de xclip seja ignorada para que caracteres de espaço não sejam considerados como separadores de parâmetros? Por exemplo, se eu selecionar a string "foo bar" (sem as aspas) e pressionar Mod4 + v VLC reclama por não conseguir abrir ambos "foo" e "bar".

Para ilustrar, em um contexto de shell, eu validaria o problema da seguinte forma:

$ params() {
    for param
    do
        echo "$param"
    done
}
$ params $(xclip -o)
params
$(xclip
-o)

E corrija assim:

$ params "$(xclip -o)"
params "$(xclip -o)"

No entanto, se eu mudar a chamada Lua para isso, não faz nada:

awful.util.spawn_with_shell('vlc "$(xclip -o)"')
    
por l0b0 16.03.2013 / 17:41

2 respostas

1

Não há necessidade, pois a saída do xclip não será avaliada pelo shell novamente; O shell executará o vlc e definirá o parâmetro para o valor de xclip -o sem avaliar a saída.

Para testar você mesmo, é possível executar coisas como:

echo $(echo ''ls'')
echo $(echo '$PATH')
echo $(echo '$(echo foobar)')
    
por 16.03.2013 / 19:58
0

Sempre coloque substituições de variáveis e substituições de comandos entre aspas duplas. Isso suprime a divisão e a globalização de palavras no resultado da substituição. Isso deve funcionar:

awful.util.spawn_with_shell('vlc -- "$(xclip -o)"')

Eu não posso explicar porque não faz nada, pode haver alguma sutileza de Lua que me escapa. Como solução, você pode escrever um script de uma linha

#!/bin/sh
vlc -- "$(xclip -o)"

e chame esse script da Awesome.

    
por 18.03.2013 / 01:54