从bash脚本在文件中运行exec on wget命令会忽略wget选项

从bash脚本在文件中运行exec on wget命令会忽略wget选项,bash,exec,wget,Bash,Exec,Wget,如果我运行这个shell脚本,我会得到exec,从而导致wget表现出愚蠢的行为 echo "wget http://www.google.com/ -O - >> output.html" > /tmp/mytext while read line do exec $line done < /tmp/mytext 第一个命令将输出输出输出到STDOUT,接下来的两个wget命令失败,因为它们毫无意义 如何让exec正常工作? 我使用exec而不是简单地对文件调用ba

如果我运行这个shell脚本,我会得到exec,从而导致wget表现出愚蠢的行为

echo "wget http://www.google.com/ -O -  >> output.html" > /tmp/mytext
while read line
do
exec $line
done < /tmp/mytext
第一个命令将输出输出输出到STDOUT,接下来的两个wget命令失败,因为它们毫无意义

如何让exec正常工作?

我使用exec而不是简单地对文件调用bash,因为如果我对大量wget调用使用exec,我会生成多个wget进程。简单地在一个包含大量URL的文件上调用bash是很慢的,因为它需要等待一个wget操作完成,然后再进行下一个wget操作

版本: GNUWGET1.15构建在LinuxGNU上。 GNUBash,版本4.3.0(1)-发行版(i686 pc linux GNU)

我认为,您可以使用

exec $(cat /tmp/mytext)
我使用exec而不是简单地对文件调用bash,因为如果 在大量wget调用中使用exec我可以获得多个wget调用 这个过程产生了

否。当调用
exec
时,它不会生成新进程。它取代了现有的流程。有关详细信息,请参见
manbash

简单地在一个包含大量URL的文件上调用bash是很慢的,因为 等待一个wget操作完成,然后再转到下一个wget操作 一个

对。幸运的是,有一个解决办法。要并行运行许多进程,请在后台运行它们。例如,要并行运行多个
wget
进程,请使用:

while read url
do
    wget "$url" -O -  >> output.html &
done <list_of_urls
您的命令提示符将消失10秒。但是,请运行:

sleep 10s &
sleep
在后台运行时,您的命令提示符将立即返回

manbash
解释:


我刚刚测试了它,它的行为和wget的行为一样,就像有三个输入一样。我觉得非常愚蠢。我不知道为什么我在寻找一个比仅仅在wget op背景下更奢侈的解决方案。谢谢!
sleep 10s
sleep 10s &
   If a command is terminated by the  control  operator  &,
   the  shell  executes  the command in the background in a
   subshell.  The shell does not wait for  the  command  to
   finish,  and the return status is 0.