首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法理解gsettings + xargs行为

无法理解gsettings + xargs行为
EN

Unix & Linux用户
提问于 2018-11-06 21:18:07
回答 1查看 66关注 0票数 0

为了设置这个阶段,在这个示例回显场景中,我有以下两个等效的和正在工作的'xargs‘组合命令:

代码语言:javascript
复制
// 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”时,第二个情况失败:

代码语言:javascript
复制
// 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

这是怎么回事,我怎样才能在这个问题上有更多的能见度?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-11-06 21:40:50

-I {}选项的xargs将导致它作为一个参数从输入传递整行。

这就是xargs(1)的命令:

-I替换-str替换在初始参数中出现的替换-str,其中包含从标准输入读取的名称。另外,unquoted空格不会终止输入项;相反,the分隔符是换行符。暗示-x和-L 1

通过使用参数打印脚本而不是gsettings,您可以很容易地看出两者之间的区别:

代码语言:javascript
复制
$ 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}

下一步要做什么取决于您想要使用这些命令实现什么。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/480230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档