GVKun编程网logo

shell – diff来自一个来源的两个管道

11

在本文中,我们将给您介绍关于shell–diff来自一个来源的两个管道的详细内容,此外,我们还将为您提供关于AzureDevops:使用来自另一个管道的工件、bashshell脚本for循环中的两个变

在本文中,我们将给您介绍关于shell – diff来自一个来源的两个管道的详细内容,此外,我们还将为您提供关于AzureDevops:使用来自另一个管道的工件、bash shell脚本for循环中的两个变量、bash – Shell管道:当一个命令失败时立即退出、bash – 从没有临时文件的两个程序的Diff输出的知识。

本文目录一览:

shell – diff来自一个来源的两个管道

shell – diff来自一个来源的两个管道

我找到了如何在SO上区分两个管道的答案,语法如下所示.

diff <(./a.out) <(./a.out | sort -n)

但是,它会创建两个a.out进程,由ps验证.是否可以只有一个a.out,将输出广播到两个流,并在这两个流上进行差异?

./a.out | tee >(cat) >(sort -n)

我可以使用tee进行广播,但不知道如何使用diff.

有什么建议吗?

编辑:为什么我不想创建两个进程?原因是这是一个并发程序,因此输出是非确定性的.因此,我必须从一个进程使用相同的输出.

解决方法

不确定你有两个进程的反对意见,但也许你可以像这样使用fifo:

mkfifo fifo
diff <(./a.out | tee fifo) <(sort < fifo)

AzureDevops:使用来自另一个管道的工件

AzureDevops:使用来自另一个管道的工件

请检查以下设置:

1.请在项目设置中禁用将工作授权范围限制为当前项目的非发布管道选项: enter image description here 如果此选项为灰色,请先在组织设置中更改。

2.请检查您的项目的可见性。

enter image description here

如果您的管道在公共项目中,那么无论您在任何设置中配置什么,作业授权范围都会自动限制为项目。公共项目中的作业只能在项目内访问资源,例如构建工件或测试结果,而不能从组织的其他项目中访问。

您可以参考有关Access repositories,artifacts,and other resources的文档。

bash shell脚本for循环中的两个变量

bash shell脚本for循环中的两个变量

我是shell脚本的新手.如果我的怀疑太愚蠢,请好好地忍受我.

我在两个不同的目录中有png图像和一个可执行文件,它从每个目录中获取图像并处理它们以生成新图像.

我正在寻找一个可以同时获取两个变量的for循环结构.这在C,C等中是可能的,但我如何实现以下内容.代码显然是错误的.

#!/bin/sh

im1_dir=~/prev1/*.png  
im2_dir=~/prev3/*.png
index=0

for i,j in $im1_dir $im2_dir  # i iterates in im1_dir and j iterates in im2_dir 
do
  run_black.sh $i $j  
done

谢谢!

如果您依赖于两个目录来匹配基于区域设置排序顺序(如您的尝试),那么数组应该可以工作.
im1_files=(~/prev1/*.png)
im2_files=(~/prev3/*.png)

for ((i=0;i<=${#im1_files[@]};i++)); do
   run_black.sh "${im1_files[i]}" "${im2_files[i]}"
done

bash – Shell管道:当一个命令失败时立即退出

bash – Shell管道:当一个命令失败时立即退出

我在bash中使用了几个命令的管道。如果一个命令失败,是否有一种方式配置bash以立即终止整个管道中的所有命令?

在我的情况下,第一个命令,即command1,运行一段时间,直到产生一些输出。例如,你可以用command1替换(sleep 5&& echo“Hello”)。

现在,command1 |错误在5秒钟后失败,但不会立即失败。

这个行为似乎与命令产生的输出量有关。例如,找到/ |错误返回立即。

一般来说,我不知道为什么bash的行为是这样的。任何人都可以想象任何有用的代码,如command1 | non-existing-command不会立即退出?

PS:使用临时文件对我来说不是一个选择,因为我围绕的中间结果是大的存储。

PPS:既没有设置也没有设置管道似乎影响这种现象。

bash文档在 section about pipelines中说:

Each command in a pipeline is executed in its own subshell […]

“在自己的subshel​​l”意味着一个新的bash进程被产生,然后执行实际的命令。每个子shell成功启动,即使它立即确定要求执行的命令不存在。

这就解释了为什么整个管道可以成功建立,即使其中一个命令是废话。 Bash不检查每个命令是否可以运行,它会将它委托给subshel​​l。这也解释了为什么,例如,命令nonexisting-command | touch hello会抛出一个“命令未找到”错误,但是文件hello将被创建。

在同一节中,它还说:

The shell waits for all commands in the pipeline to terminate before returning a value.

在睡眠5 |非正常命令,正如A.H.指出的,睡眠5在5秒之后终止,而不是立即,所以shell也将等待5秒。

我不知道为什么这样实现。在像你这样的情况下,行为肯定不会像人们期望的那样。

无论如何,一个稍微丑陋的解决方法是使用FIFO:

mkfifo myfifo
./long-running-script.sh > myfifo &
whoops-a-typo < myfifo

这里,long-running-script.sh启动,然后脚本在下一行立即失败。使用多个FIFO,这可以扩展到具有两个以上命令的管道。

bash – 从没有临时文件的两个程序的Diff输出

bash – 从没有临时文件的两个程序的Diff输出

说我有太多的程序a和b,我可以运行./a和./b。

是否有可能差别他们的输出没有第一次写入临时文件?

使用<(command)将一个命令的输出传递给另一个程序,就好像它是一个文件名。 Bash管道程序的输出到管道,并传递一个文件名,如/ dev / fd / 63到外部命令。
diff <(./a) <(./b)

同样,如果你想管道一些东西到命令,你可以使用>(command)。

今天关于shell – diff来自一个来源的两个管道的讲解已经结束,谢谢您的阅读,如果想了解更多关于AzureDevops:使用来自另一个管道的工件、bash shell脚本for循环中的两个变量、bash – Shell管道:当一个命令失败时立即退出、bash – 从没有临时文件的两个程序的Diff输出的相关知识,请在本站搜索。

本文标签: