在本文中,我们将给您介绍关于shell–diff来自一个来源的两个管道的详细内容,此外,我们还将为您提供关于AzureDevops:使用来自另一个管道的工件、bashshell脚本for循环中的两个变
在本文中,我们将给您介绍关于shell – diff来自一个来源的两个管道的详细内容,此外,我们还将为您提供关于AzureDevops:使用来自另一个管道的工件、bash shell脚本for循环中的两个变量、bash – Shell管道:当一个命令失败时立即退出、bash – 从没有临时文件的两个程序的Diff输出的知识。
本文目录一览:- shell – diff来自一个来源的两个管道
- AzureDevops:使用来自另一个管道的工件
- bash shell脚本for循环中的两个变量
- bash – Shell管道:当一个命令失败时立即退出
- bash – 从没有临时文件的两个程序的Diff输出
shell – diff来自一个来源的两个管道
diff <(./a.out) <(./a.out | sort -n)
但是,它会创建两个a.out进程,由ps验证.是否可以只有一个a.out,将输出广播到两个流,并在这两个流上进行差异?
./a.out | tee >(cat) >(sort -n)
我可以使用tee进行广播,但不知道如何使用diff.
有什么建议吗?
编辑:为什么我不想创建两个进程?原因是这是一个并发程序,因此输出是非确定性的.因此,我必须从一个进程使用相同的输出.
解决方法
mkfifo fifo diff <(./a.out | tee fifo) <(sort < fifo)
AzureDevops:使用来自另一个管道的工件
请检查以下设置:
1.请在项目设置中禁用将工作授权范围限制为当前项目的非发布管道选项:
如果此选项为灰色,请先在组织设置中更改。
2.请检查您的项目的可见性。
如果您的管道在公共项目中,那么无论您在任何设置中配置什么,作业授权范围都会自动限制为项目。公共项目中的作业只能在项目内访问资源,例如构建工件或测试结果,而不能从组织的其他项目中访问。
您可以参考有关Access repositories,artifacts,and other resources的文档。
bash shell脚本for循环中的两个变量
我在两个不同的目录中有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管道:当一个命令失败时立即退出
在我的情况下,第一个命令,即command1,运行一段时间,直到产生一些输出。例如,你可以用command1替换(sleep 5&& echo“Hello”)。
现在,command1 |错误在5秒钟后失败,但不会立即失败。
这个行为似乎与命令产生的输出量有关。例如,找到/ |错误返回立即。
一般来说,我不知道为什么bash的行为是这样的。任何人都可以想象任何有用的代码,如command1 | non-existing-command不会立即退出?
PS:使用临时文件对我来说不是一个选择,因为我围绕的中间结果是大的存储。
PPS:既没有设置也没有设置管道似乎影响这种现象。
Each command in a pipeline is executed in its own subshell […]
“在自己的subshell”意味着一个新的bash进程被产生,然后执行实际的命令。每个子shell成功启动,即使它立即确定要求执行的命令不存在。
这就解释了为什么整个管道可以成功建立,即使其中一个命令是废话。 Bash不检查每个命令是否可以运行,它会将它委托给subshell。这也解释了为什么,例如,命令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输出
是否有可能差别他们的输出没有第一次写入临时文件?
diff <(./a) <(./b)
同样,如果你想管道一些东西到命令,你可以使用>(command)。
今天关于shell – diff来自一个来源的两个管道的讲解已经结束,谢谢您的阅读,如果想了解更多关于AzureDevops:使用来自另一个管道的工件、bash shell脚本for循环中的两个变量、bash – Shell管道:当一个命令失败时立即退出、bash – 从没有临时文件的两个程序的Diff输出的相关知识,请在本站搜索。
本文标签: