高手帮我看看这个并行下载脚本哪里有毛病

sh/bash/dash/ksh/zsh等Shell脚本
回复
yubinalice
帖子: 121
注册时间: 2015-12-23 16:20
系统: ubuntu 16.04
送出感谢: 1 次
接收感谢: 0

高手帮我看看这个并行下载脚本哪里有毛病

#1

帖子 yubinalice » 2019-08-04 8:31

写了一个脚本,目的是3个线程同时下载文件,代码如下

-------------------------------------------------------------------------------------------
#!/bin/bash
mkfifo fifo && exec 7<>fifo && rm fifo
for n in {1..3}
do
echo >&7
done

for i in {1..39}
do
{
read -u7

for j in {1..5}
do
echo $i file $j time
mkdir $$
./you-get/you-get `sed -n "$i"p urls` -o $$
if [ $? == 0 ]
then
break
mv $$/*mp4 .
rmdir $$
fi
echo >&7
done
}&
done

-------------------------------------------------------------------------------------------
其中,$i是要下载文件的数目,$j是重试次数,$n是线程数,
也就是说,
39个文件,5次重试,同时下载3个。
然而,实际的执行效果,是三个文件都下载到同一个目录里面,让他开启三个子进程,不要让他下到同一个目录里面。
谁会做,帮我看看。
头像
astolia
论坛版主
帖子: 3913
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 649 次

Re: 高手帮我看看这个并行下载脚本哪里有毛病

#2

帖子 astolia » 2019-08-04 22:07

遇事不懂查手册 man bash

代码: 全选

       $      Expands  to  the  process ID of the shell.  In a () subshell, it
              expands to the process ID of the current  shell,  not  the  sub‐
              shell.
这就是$$的行为

至于该怎么处理,你在手册里搜$$就会知道
Joyven
帖子: 1
注册时间: 2019-08-16 0:23
系统: macos
送出感谢: 0
接收感谢: 0

Re: 高手帮我看看这个并行下载脚本哪里有毛病

#3

帖子 Joyven » 2019-08-16 0:26

修改了一下,或许就好了,如果还有问题,仔细查看you-get那个地方,以及mv $$/*mp4 .这个地方。

代码: 全选

#!/bin/bash
mkfifo fifo && exec 7<>fifo && rm fifo
for n in {1..3}
do
	echo >&7
done

for i in {1..39}
do {
		read -u7

		for j in {1..5}
		do
			echo $i file $j time
			mkdir $$
			./you-get/you-get `sed -n "$i"p urls` -o $$
			if [ $? != 0 ]
			then
				mv $$/*mp4 .
				rmdir $$
			fi
		done
		echo >&7
	} &
done

wait
exec 7>&-
exec 7<&-

回复

回到 “Shell脚本”