Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 管道输出到标准输出,然后到命令,然后到变量_Bash_Unix_Pipe_Xcodebuild_Tee - Fatal编程技术网

Bash 管道输出到标准输出,然后到命令,然后到变量

Bash 管道输出到标准输出,然后到命令,然后到变量,bash,unix,pipe,xcodebuild,tee,Bash,Unix,Pipe,Xcodebuild,Tee,我正在使用TeamCity服务器,我的构建命令之一是: xcodebuild -scheme "<myscheme>" archive 这会奏效的。然而,我的问题是,我希望xcodebuild的日志通过管道传输到stdout和php-r“$code” 而且我无法理解如何read-uxdsym工作或打算如何工作。有人知道我会怎么做吗: 将所有输出输送至标准输出 将所有输出管道化到中间程序/脚本(grep) 将上述中间程序/脚本输出存储到变量中 测试:保存文件scheme.out

我正在使用TeamCity服务器,我的构建命令之一是:

xcodebuild -scheme "<myscheme>" archive
这会奏效的。然而,我的问题是,我希望
xcodebuild
的日志通过管道传输到
stdout
php-r“$code”

而且我无法理解如何
read-uxdsym
工作或打算如何工作。有人知道我会怎么做吗:

  • 将所有输出输送至标准输出
  • 将所有输出管道化到中间程序/脚本(
    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

您的代码有很多依赖项。我将说明我认为您需要什么,而无需使用标准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
。因此,为了使输出也出现在标准输出上,我们需要在
$(…)
重定向它之前将标准输出复制到另一个文件句柄。因此,我们使用
exec
将stdout复制为文件句柄3。通过这种方式,
tee>(cat>&3)
将命令的输出发送到原始stdout(现在称为
3
)和文件句柄
1
,并在管道的下一阶段传递

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

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

注意:我无法存储
xcodebuild
的输出,因为如果发生任何错误,xcodebuild往往会挂起,我需要将输出显示在flyI上。我离得太近了。。。我想我的脑袋被文件描述符重定向弄糊涂了。谢谢
$ exec 3>&1
$ var=$(seq 4 | tee >(cat >&3) | sed 's/3/3-processed/')
1
2
3
4
$ echo "$var"
1
2
3-processed
4
exec 5>&1
dsym=$(xcodebuild -scheme "<myscheme>" archive | tee >(cat >&5) | php -r "$code")