为了设置这个阶段,在这个示例回显场景中,我有以下两个等效的和正在工作的'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现在,当我将“echo”命令替换为“gsettings”时,第二个情况失败:
// ok
$ echo org.cinnamon.desktop.keybindings.wm move-to-workspace-5 | xargs gsettings get
['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这是怎么回事,我怎样才能在这个问题上有更多的能见度?
发布于 2018-11-06 21:40:50
-I {}选项的xargs将导致它作为一个参数从输入传递整行。
这就是xargs(1)的命令:
-I替换-str替换在初始参数中出现的替换-str,其中包含从标准输入读取的名称。另外,unquoted空格不会终止输入项;相反,the分隔符是换行符。暗示-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}下一步要做什么取决于您想要使用这些命令实现什么。
https://unix.stackexchange.com/questions/480230
复制相似问题