Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 列表中每个项目的exec bash脚本_Linux_Bash_Xargs - Fatal编程技术网

Linux 列表中每个项目的exec bash脚本

Linux 列表中每个项目的exec bash脚本,linux,bash,xargs,Linux,Bash,Xargs,我有一个带有URL的文本文件 http://example.com/1 http://example.com/2 等等 我有一个bash脚本,它将URL作为$1并使用它。 我想自动化它,我已经试过了 cat urls.txt | xargs -P0 bash -c myscript.sh 但是,$1显示为空。我建议您使用while循环,下面是一个示例: #!/bin/bash while read -r line # read a line from file. do ech

我有一个带有URL的文本文件

http://example.com/1
http://example.com/2
等等

我有一个bash脚本,它将URL作为$1并使用它。 我想自动化它,我已经试过了

cat urls.txt | xargs -P0 bash -c myscript.sh
但是,
$1
显示为空。

我建议您使用while循环,下面是一个示例:

#!/bin/bash

while read -r line      # read a line from file.
do
  echo "$line"
  ./myscript.sh "$line"             # pass a line to the script
done < urls.txt                  
#/bin/bash
读取-r行时#从文件中读取一行。
做
回音“$line”
./myscript.sh“$line”#向脚本传递一行
完成
您不需要
-c
(或
cat
):

使用
-c
时,命令字符串后的下一个参数用作
$0
的值,而不是
$1

$ bash -c 'echo Command: $0; echo Arg: $1' zeroth first
Command: zeroth
Arg: first

使用GNU Parallel时,它看起来如下所示:

cat urls.txt | parallel -j0 ./myscript.sh
GNU Parallel是一个通用的并行程序,它使得在同一台机器上或在您有ssh访问权的多台机器上并行运行作业变得非常容易。它通常可以代替
for
循环

如果您有32个不同的作业要在4个CPU上运行,并行化的直接方法是在每个CPU上运行8个作业:

GNU Parallel会在完成时生成一个新进程—使CPU保持活动状态,从而节省时间:

安装

如果您的发行版没有打包GNU Parallel,那么您可以进行个人安装,而不需要root访问。通过执行以下操作,可在10秒内完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
有关其他安装选项,请参阅

了解更多信息

请参阅更多示例:

观看介绍视频:

浏览本教程:


注册电子邮件列表以获得支持:

这里不需要
eval
。@chepner为什么我需要将
$line
变量包装到这里的双引号中?我检查了它,它在没有双引号的情况下工作。@我的URL中没有空格,但我认为这是很好的实践,不仅仅是空格。无引号的扩展也受路径名扩展的影响。默认情况下,将不匹配的模式视为文本,但引用参数扩展仍然是一种好的做法,除非有充分的理由不这样做。
cat urls.txt | parallel -j0 ./myscript.sh
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash