【问题标题】:Pass configuration parameter(s) to a git command via xargs util通过 xargs util 将配置参数传递给 git 命令
【发布时间】:2019-12-11 11:29:52
【问题描述】:

我正在尝试使用xargs 构建一个命令来传递配置参数:user.nameuser.emailgit commit

xargs 构建的命令:

git -c user.name=abc -c user.email=abc@mail.com commit

我尝试过的:

echo "-c user.name=abc -c user.email=abc@mail.com" | xargs -I % git % commit

但是,git 会返回:

未知选项:-c user.name=abc -c user.email=abc@mail.com

即使xargs 冗长,该命令也能正常工作。

echo "-c user.name=abc -c user.email=abc@mail.com" | xargs -tI % git % commit

这将打印要执行的命令git -c user.name=abc -c user.email=abc@mail.com commit,该命令在复制粘贴到终端时有效。

请注意,配置参数由空格分隔。

Some context for what exactly I am trying to do by passing configuration parameters

【问题讨论】:

  • 哪个操作系统? -J 而不是 -I 解决了 OS X 的问题。(问题是 -I %% 替换为 作为一个参数 行(就像你写了 git "-c user.name=abc -c user.email=abc@mail.com" commit)。 Linux(其xargs 不支持-J)您可以使用子shell:xargs -I % bash -c "git % commit"
  • @Amadan,我在 linux shell 和 git-bash for windows 上都试过了。 xargs 不应该冗长显示这个 git "-c user.name=abc -c user.email=abc@mail.com" commit 而不是这个 git -c user.name=abc -c user.email=abc@mail.com commit 吗? (基于-I描述的问题)
  • 没有。我说“好像”。 xargs 实际上并不构造引号;它使用类似于此的 C 函数执行该函数:execl("git", "-c user.name=abc -c user.emal=abc@mail.com", "commit"),其中它执行带有两个参数的 git 命令。用空格分隔命令行(或将带引号的字符串作为一个)是 shell 的工作,但这里不涉及 shell。 verbose 只是打印所有与空格相关的参数,就像 echo 一样;你无法区分参数是如何拆分的。

标签: git xargs


【解决方案1】:

每个 cmets,xargs 将单个参数 % 替换为单个参数 -c user.name=abc -c user.email=abc@mail.com;结果命令

git -c user.name=abc -c user.email=abc@mail.com commit

有两个参数,第一个是-c user.name=abc -c user.email=abc@mail.com,显然是无效选项。

我能想到的最便携的解决方法是让 shell 重新解释该行:

echo "-c user.name=abc -c user.email=abc@mail.com" | xargs -I % bash -c "git % commit"

这样,xargs 将使用两个参数执行 bash-cgit -c user.name=abc -c user.email=abc@mail.com commitbash -c command 执行该命令,其中包括 bash 通常执行的完整命令行解析。这将导致bash 使用五个参数执行git-cuser.name=abc-cuser.email=abc@mail.comcommit

【讨论】:

  • 按照thisIf you use a replace string in xargs (-I) you can not force xargs to use more than one argument.
  • 我也想与文档确认,+1 并接受了答案:)
猜你喜欢
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 2021-11-29
  • 2011-10-23
  • 2018-02-28
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
相关资源
最近更新 更多