awful.util.spawn_with_shell('vlc $(xclip -o)')
出力がxclip
エスケープされているかどうかを確認する方法スペース文字パラメータ区切り記号ではありませんか?たとえば、文字列「foo bar」(引用符を除く)を選択してMod4+を押すと、vVLCが開くことができないと文句を言います。両方「金持ち」そして「バー」。
これを説明するために、次のようにシェルコンテキストで問題を確認します。
$ params() {
for param
do
echo "$param"
done
}
$ params $(xclip -o)
params
$(xclip
-o)
次のように修正してください。
$ params "$(xclip -o)"
params "$(xclip -o)"
しかし、Lua呼び出しをこれに変更すると、何もしません。
awful.util.spawn_with_shell('vlc "$(xclip -o)"')
答え1
シェルは xclip の出力を再評価しないため、必要ありません。シェルはvlcを実行し、xclip -o
出力を評価せずにパラメータを値に設定します。
直接テストするには、次のコマンドを実行できます。
echo $(echo '`ls`')
echo $(echo '$PATH')
echo $(echo '$(echo foobar)')
答え2
変数置換とコマンド置換は常に二重引用符で囲んでください。これは代替結果のトークン化とワイルドカードを抑制します。これは働きます:
awful.util.spawn_with_shell('vlc -- "$(xclip -o)"')
なぜ何もしないのを説明することはできません。おそらくLuaに私が気づかなかった微妙な部分があるかもしれません。回避策として、1行のスクリプトを作成できます。
#!/bin/sh
vlc -- "$(xclip -o)"
Awesomeでスクリプトを呼び出します。