gsettings + 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

이제 "echo" 명령을 "gsettings get"으로 바꾸면 두 번째 사례가 실패합니다.

// 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

무슨 일이에요? 이 문제에 대해 어떻게 더 명확하게 알 수 있습니까?

답변1

-I {}옵션을 사용하면 xargs입력의 전체 줄을 단일 인수로 전달하게 됩니다.

xargs(1) 맨페이지에는 다음과 같이 나와 있습니다.

-나는 -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}

다음에 수행할 작업은 이러한 명령을 사용하여 달성하려는 작업에 따라 다릅니다.

관련 정보