【问题标题】:Executing multiple commands with XARGS in Windows Cygwin在 Windows Cygwin 中使用 XARGS 执行多个命令
【发布时间】:2020-02-03 19:48:47
【问题描述】:

我有这个输出:

$ ./adb devices

List of devices attached
R9WM80DNNPJ     device

(最终这将返回多行设备,例如:

List of devices attached
R9WM80DNNPJ     device
R9WM80DNNPA     device
R9WM80DNNPB     device
R9WM80DNNPC     device

)

我正在尝试获取设备名称以将其传递给多个其他命令。试图最终得到一个看起来像这样的脚本(它会做的不仅仅是 echo ofc):

adb devices |  more +1 | cut -sf 1 | xargs -I % sh -c '{ ^
echo % ; ^
echo "Test %"; ^
}'

当我将命令全部放在一行上时,cygwin终端没有问题将其回显:

当我将该命令移动到文件中时,它不再正常工作(第一行输出是所用命令的打印,但随后它不执行第一个回显):

并且运行多行命令也不起作用:

我的猜测是我对换行符做错了什么?还是与sh -c 有关?或两者兼而有之!

【问题讨论】:

  • 你是在写shell脚本还是批处理文件?
  • 我有这个脚本的 linux 版本。所以想写一些尽可能接近的东西。所以理想情况下是在 Windows 上的 cygwin 中运行的 bash 脚本。 (如果我把这一切搞混了,请告诉我:-))
  • 考虑使用文本编辑器而不是记事本,默认情况下将编写 UNIX 行结尾或可以配置为。或者至少在保存后对文件运行dos2unix

标签: windows cygwin xargs


【解决方案1】:

移至默认参数​​列表标记{} 已解决此问题!

adb devices |  more +1 | cut -sf 1 | xargs -I {} sh -c {' ^
    echo {}; ^
    echo "Test {}"; ^
'}

【讨论】:

  • 确保您的脚本文件使用 linux 行尾 (\n) 而不是 windows (\r\n)。还放入 shebang 行作为第一行,即#!/usr/bin/bash.
猜你喜欢
  • 2011-10-20
  • 2011-11-20
  • 2016-08-11
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多