Xargs
無法理解 gsettings + xargs 行為
為了設置舞台,在這個範例回顯場景中,我有這 2 個等效且有效的“xargs”組合命令:
// ok $ echo org.cinnamon.desktop.keybindings.wm move-to-workspace-5 | xargs echo org.cinnamon.desktop.keybindings.wm move-to-workspace-5 // ok $ echo org.cinnamon.desktop.keybindings.wm move-to-workspace-5 | xargs -I '{}' echo '{}' org.cinnamon.desktop.keybindings.wm move-to-workspace-5
現在,當我用“gsettings get”替換“echo”命令時,第二種情況會失敗:
// ok $ echo org.cinnamon.desktop.keybindings.wm move-to-workspace-5 | xargs gsettings get ['<Alt>F4'] // fails $ echo org.cinnamon.desktop.keybindings.wm move-to-workspace-5 | xargs -I '{}' gsettings get '{}' Usage: gsettings [--schemadir SCHEMADIR] get SCHEMA[:PATH] KEY Get the value of KEY Arguments: SCHEMADIR A directory to search for additional schemas SCHEMA The name of the schema PATH The path, for relocatable schemas KEY The key within the schema
發生了什麼事,我怎樣才能在這個問題上獲得更多的可見性?
的
-I {}
選項xargs
將導致它將輸入中的整行作為單個參數傳遞。這就是 xargs(1) 的聯機幫助頁所說的:
-I 替換-str
用從標準輸入讀取的名稱替換初始參數中出現的 replace-str。此外,未加引號的空格不會終止輸入項;相反 ,分隔符是換行符。暗示 -x 和**-L 1**。
您可以通過使用參數列印腳本而不是
gsettings
:$ cat /tmp/a #! /bin/sh echo -n "$0"; for a; do echo -n " {$a}"; done; echo $ chmod 755 /tmp/a $ echo foo bar | xargs /tmp/a /tmp/a {foo} {bar} $ echo foo bar | xargs -I '{}' /tmp/a '{}' /tmp/a {foo bar}
接下來要做什麼取決於你想用這些命令實現什麼。