Questions tagged «concurrency»


1
无法创建常规文件“文件名”:文件存在
我一直在我的一个构建脚本中收到此奇怪的错误消息- cp失败,返回错误“文件存在”。我什至尝试使用cp -f,如果文件存在,它将覆盖该文件,但错误仍然出现。运行cp覆盖现有文件,当我做手工完美。是什么导致此错误?
23 cp  concurrency 


3
tee + cat:多次使用输出,然后合并结果
例如,如果我调用某个命令,则echo可以在中使用该命令的结果在其他多个命令中tee。例: echo "Hello world!" | tee >(command1) >(command2) >(command3) 使用cat我可以收集几个命令的结果。例: cat <(command1) <(command2) <(command3) 我希望能够同时做这两种事情,这样我就可以tee在其他输出(例如,echo我编写的输出)上调用这些命令,然后使用以下命令将所有结果收集到一个输出中cat。 保持结果为了这一点很重要,这意味着输出的线路command1,command2并且command3不应该纠缠在一起,但订购的命令是(因为它与发生cat)。 可能有比cat和更好的选择,tee但是到目前为止,这些是我所知道的。 我想避免使用临时文件,因为输入和输出的大小可能很大。 我该怎么办? PD:另一个问题是这种情况是循环发生的,这使得处理临时文件更加困难。这是我目前拥有的代码,适用于小型测试用例,但是当以我不理解的方式从auxfile读取和写入时,它会创建无限循环。 somefunction() { if [ $1 -eq 1 ] then echo "Hello world!" else somefunction $(( $1 - 1 )) > auxfile cat <(command1 < auxfile) \ <(command2 < auxfile) \ …
18 pipe  cat  tee  concurrency 

2
多个流程之间的沟通
我有一个bash脚本,该脚本将manager()函数作为x时间的单独进程运行。如何从脚本内部将消息转发到所有manager()进程? 我已经读过有关匿名管道的信息,但是我不知道如何与它共享消息。.我尝试使用命名管道进行操作,但是看来我必须为每个进程创建一个单独的命名管道吗? 最优雅的方法是什么? 到目前为止,这是我的代码: #!/bin/bash manager () { while : do echo "read what has been passed to \$line" done } x=1 while [ $x -le 5 ] do manager x & x=$(( $x + 1 )) done while : do while read line do echo "What has been passed …

4
如何自动分配回路设备?
我正在编写一些Shell脚本来处理某些磁盘映像内容,并且需要使用循环设备来访问某些磁盘映像。但是,我不确定如何在不使程序处于竞争状态的情况下正确分配循环设备。 我知道我可以losetup -f用来获取下一个未分配的循环设备,然后像这样分配该循环设备: ld=$(losetup -f) sudo losetup $ld myfile.img dostuffwith $ld 但是,在我想同时运行程序的多个实例的情况下,这几乎是关于竞赛条件的教科书示例,这让我非常困扰。如果我正在运行该程序的多个实例,或者其他程序也试图获取一个循环设备,则每个进程可能无法在下一个调用之前分配循环设备losetup -f,在这种情况下,两个进程都将认为同一循环设备可用,但只有一个设备可以使用。 我可以为此使用外部同步,但是我想(如果可能)避免额外的复杂性。同样,其他使用循环设备的程序也不太可能遵循我可能提出的任何同步要求。 如何避免这种潜在的比赛状况?理想情况下,我希望能够以原子方式发现和绑定循环设备,例如,使用以下命令: ld=$(sudo losetup -f myfile.img) dostuffwith $ld 但是,当我这样做时,$ld不会分配给循环设备路径sudo,而是将其移出,因为这样会导致sudo ld=$(losetup -f myfile.img)权限错误。



2
bash如何对待“>>()”
在尝试输出重定向和进程替换时,我偶然发现了以下命令及其结果输出: me @ elem:〜$ echo foo>>(cat); 回声条 酒吧 me @ elem:〜$ foo (是的,最后的空换行是有意的。) 因此,bash echo的栏会显示我通常的提示,echo的foo,echo的换行符,然后将光标留在那里。如果再次按下Enter键,它将在新行上打印提示,并将光标留在它的后面(按预期,当有人在空命令行上按下Enter键时)。 我期望它将foo写入文件描述符,cat读取它并回显foo,第二个回显回显的栏,然后返回命令提示符。但这显然不是事实。 有人可以解释发生了什么吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.