2016-11-24 88 views
1

引號內我想通過可能含有空格的路徑爲su -c命令.sh腳本中:逃生蘇-c

su -c "xdg-desktop-menu install ${DesktopFile}" -m "${Username}" 

$ DesktopFile是我的道路,需要得到逃過一劫。我在""內部用'\"和幾個大括號嘗試了很多變體,但我還沒有想出解決方案。有趣的是,xdg-desktop-icon工作正常,但是xdg-desktop-menu死於空白處。有什麼建議麼?

回答

0

如果您使用bash,則在引用不足時可使用printf '%q'來轉義特殊字符。

su -c "xdg-desktop-menu install $(printf '%q' "$DesktopFile") -m $(printf '%q' "$Username")" 

注意$(printf...)不需要引號,但是"$DesktopFile"一樣。變量需要安全地傳遞給printf,所以必須引用它。 printf '%q'的輸出保證不受分詞和通配的影響,因此不需要引號。 (雖然,如果你想引用它,你可以,兩邊都需要\"

+0

謝謝。 2個問題:a)我想使用sh而不是bash,所以沒有%q可用,並且b)-m是su的選項,而不是xdg-desktop-menu,所以引號會有所改變。 b)我可以解決,但a)是一個問題...任何關於sh的printf%q的建議? – broozar

+0

ok,切換到/ bin/bash進行測試,發現: 'FFQ = $(printf'%q'「$ DesktopFile」)' 'su -c「xdg-desktop-menu install $ FFQ」-m「 $用戶名「' 仍然分裂後的空白。 – broozar

+0

發現了xdg-desktop-menu和空格的一個(n舊的)bug報告,即使正確通過轉義也是如此。也許我的版本仍然有這個錯誤。 – broozar

0

如果這是xdg-desktop-menu中的一個bug,因爲它在xdg-桌面圖標,不過有我現在用一種變通方法:

cd "$PathWithSpaces" 
su -c "xdg-desktop-menu install $DesktopFilenameWithoutSpaces" -m "$Username" 

PathWithSpaces包含DesktopFilenameWithoutSpaces,似乎可靠地工作。