
을 기반으로제안, 이제 다음 전화를 받습니다rc.lua:
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에 제가 눈치채지 못한 미묘한 부분이 있을 수도 있습니다. 해결 방법으로 한 줄 스크립트를 작성할 수 있습니다.
#!/bin/sh
vlc -- "$(xclip -o)"
Awesome에서 스크립트를 호출합니다.