管道输出到stdout,然后到命令,然后到变量

以撒

我在TeamCity服务器上工作,我的构建命令之一是:

xcodebuild -scheme "<myscheme>" archive

我需要检索.dSYM文件

code=$(cat <<-'CODE'
$lines = file("php://stdin");
foreach($lines as $line){
  if(preg_match("#Touch (.*dSYM)#",$line,$m))echo "$m[1]\n";
}
CODE
)
dsym=$(xcodebuild -scheme "<myscheme>" archive | php -r "$code")

这将起作用。但是,我的问题是,我希望将的日志xcodebuild通过管道传输到stdoutANDphp -r "$code"

xcodebuild -scheme "<myscheme>" archive | tee >(php -r "$code" --)

这也有效,构建日志显示出来,如果更改php -r "$code" --php -r "$code" -- | cat,它会记录.dSYM文件位置。

但是,以下操作无效:

xcodebuild -scheme "<myscheme>" archive | tee >(dsym=$(php -r "$code" --))

#this one is the closest but is the wrong way around,
#dsym = all the output, the filename is sent to stdout
exec 5>&1
dsym=$(xcodebuild -scheme "<myscheme>" archive | tee >(php -r "$code" >&5))

而且我无法理解read -u X dsym工作原理或工作原理。有谁知道我会怎么做:

  • 将所有输出管道连接到标准输出
  • 将所有输出传递到中间程序/脚本(grep
  • 将上面的中间程序/脚本输出存储到变量中

测试:保存文件scheme.out并替换xcodebuild...cat scheme.out

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus nibh
nulla, tempor nec dolor ac, eleifend imperdiet diam. Mauris tristique
congue condimentum. Nullam commodo erat fringilla vestibulum tempus.
Aenean mattis varius erat in venenatis. Donec eu tellus urna. Morbi
lacinia vulputate purus, eu egestas tortor varius eget. Curabitur
vitae commodo elit, vitae ullamcorper leo.
Touch some_test_dsym_file.dSYM
Nunc malesuada, nisi at ultricies lobortis, odio diam rhoncus urna,
sed scelerisque enim ipsum eget quam. Nunc ut iaculis sem. Pellentesque
massa odio, sodales nec lacinia nec, rutrum eu neque. Aenean quis neque
magna. Nam quis dictum quam. Proin ut libero tortor. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Vivamus vehicula fringilla consequat. Curabitur tincidunt est sed magna
congue tristique. Maecenas aliquam nibh eget pellentesque pellentesque.
Quisque gravida cursus neque sed interdum. Proin ornare dapibus
dignissim.

所需的输出

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus nibh
nulla, tempor nec dolor ac, eleifend imperdiet diam. Mauris tristique
congue condimentum. Nullam commodo erat fringilla vestibulum tempus.
Aenean mattis varius erat in venenatis. Donec eu tellus urna. Morbi
lacinia vulputate purus, eu egestas tortor varius eget. Curabitur
vitae commodo elit, vitae ullamcorper leo.
Touch some_test_dsym_file.dSYM
Nunc malesuada, nisi at ultricies lobortis, odio diam rhoncus urna,
sed scelerisque enim ipsum eget quam. Nunc ut iaculis sem. Pellentesque
massa odio, sodales nec lacinia nec, rutrum eu neque. Aenean quis neque
magna. Nam quis dictum quam. Proin ut libero tortor. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Vivamus vehicula fringilla consequat. Curabitur tincidunt est sed magna
congue tristique. Maecenas aliquam nibh eget pellentesque pellentesque.
Quisque gravida cursus neque sed interdum. Proin ornare dapibus
dignissim.

所需的输出 echo $dsym

some_test_dsym_file.dSYM
约翰1024

您的代码有很多依赖性。我将在不使用标准unix工具的情况下说明您的需求。

这将运行命令,seq 4并将其所有输出发送到stdout,还将其所有输出发送到另一个命令sed 's/3/3-processed/',该命令的输出将捕获到变量中var

$ exec 3>&1
$ var=$(seq 4 | tee >(cat >&3) | sed 's/3/3-processed/')
1
2
3
4

为了说明我们成功捕获了sed命令的输出,请执行以下操作:

$ echo "$var"
1
2
3-processed
4

说明: var=$(...)捕获文件句柄1(stdout)的输出并将其分配给var因此,要使输出也出现在stdout上,我们需要 $(...)重定向之前stdout复制到另一个文件句柄因此,我们exec将stdout复制为文件句柄3。这样,tee >(cat >&3)既将命令的输出发送到原始stdout(现在称为3),也将文件的句柄发送给1在管道的下一阶段传递的文件句柄

因此,使用您的工具链,尝试:

exec 5>&1
dsym=$(xcodebuild -scheme "<myscheme>" archive | tee >(cat >&5) | php -r "$code")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用管道将Ipython magic输出输出到变量?

来自分类Dev

管道输出到环境变量导出命令

来自分类Dev

动画绝对div到左:0然后到右:0并循环

来自分类Dev

管道python记录stdout流输出到grep

来自分类Dev

Python-Android logcat将stdout输出到textview然后保存到.txt文件错误

来自分类Dev

Bash函数是否可以将值输出到文件描述符,然后仅将其分配给变量?

来自分类Dev

如何设置变量作为命令的输出,然后稍后在Linux上的同一命令中使用该变量?

来自分类Dev

PHP Shell命令输出到变量

来自分类Dev

管道命令输出到运行/后台命令的输入

来自分类Dev

Python:使用CSV解析(?)变量,然后将其输出到另一个文件

来自分类Dev

回显命令,然后运行它-管道命令失败?

来自分类Dev

输出到文件,然后使用文件输入

来自分类Dev

将文件内容输出到stdout的命令?

来自分类Dev

如何将FLV编码为一个临时文件,然后使用FFMpeg将其输出到stdout?

来自分类Dev

将awk命令结果输出到变量

来自分类Dev

GitPython管道输出到stdout

来自分类Dev

管道输出到删除命令

来自分类Dev

读取用户输入,然后输出到文件

来自分类Dev

将命令的输出管道传输到grep中,然后传输到另一个命令中

来自分类Dev

查找命令输出以进行排序,然后删除

来自分类Dev

管道输出到sed的命令

来自分类Dev

将字符串输出到日志文件,然后通过管道传递给参数

来自分类Dev

捕获命令的输出,对其进行处理,然后仅将其输出到终端

来自分类Dev

无法将命令的管道输出输出到zathura中

来自分类Dev

VB-SQL查询到读取器或数据表,然后到文本框

来自分类Dev

Pipe Bash命令输出到stdout和变量

来自分类Dev

清理命令的输出到管道通知发送

来自分类Dev

从 for 循环循环输出到变量,然后导出到 HTML

来自分类Dev

集合到数组然后到范围

Related 相关文章

  1. 1

    用管道将Ipython magic输出输出到变量?

  2. 2

    管道输出到环境变量导出命令

  3. 3

    动画绝对div到左:0然后到右:0并循环

  4. 4

    管道python记录stdout流输出到grep

  5. 5

    Python-Android logcat将stdout输出到textview然后保存到.txt文件错误

  6. 6

    Bash函数是否可以将值输出到文件描述符,然后仅将其分配给变量?

  7. 7

    如何设置变量作为命令的输出,然后稍后在Linux上的同一命令中使用该变量?

  8. 8

    PHP Shell命令输出到变量

  9. 9

    管道命令输出到运行/后台命令的输入

  10. 10

    Python:使用CSV解析(?)变量,然后将其输出到另一个文件

  11. 11

    回显命令,然后运行它-管道命令失败?

  12. 12

    输出到文件,然后使用文件输入

  13. 13

    将文件内容输出到stdout的命令?

  14. 14

    如何将FLV编码为一个临时文件,然后使用FFMpeg将其输出到stdout?

  15. 15

    将awk命令结果输出到变量

  16. 16

    GitPython管道输出到stdout

  17. 17

    管道输出到删除命令

  18. 18

    读取用户输入,然后输出到文件

  19. 19

    将命令的输出管道传输到grep中,然后传输到另一个命令中

  20. 20

    查找命令输出以进行排序,然后删除

  21. 21

    管道输出到sed的命令

  22. 22

    将字符串输出到日志文件,然后通过管道传递给参数

  23. 23

    捕获命令的输出,对其进行处理,然后仅将其输出到终端

  24. 24

    无法将命令的管道输出输出到zathura中

  25. 25

    VB-SQL查询到读取器或数据表,然后到文本框

  26. 26

    Pipe Bash命令输出到stdout和变量

  27. 27

    清理命令的输出到管道通知发送

  28. 28

    从 for 循环循环输出到变量,然后导出到 HTML

  29. 29

    集合到数组然后到范围

热门标签

归档