从bash脚本在文件中运行exec on wget命令会忽略wget选项
如果我运行这个shell脚本,我会得到exec,从而导致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
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.