![如何从文件中读取命令?](https://linux22.com/image/39228/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E8%AF%BB%E5%8F%96%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我有一些php
按顺序运行的脚本,例如:
php index.php import file1 --offline &&
php index.php import file2 --deleteUnused &&
php index.php import file3
现在我新发现了该parallel
命令,并且尝试了类似的操作:
parallel -j 3 -- "php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"
而且效果很好。
我是否可以拥有一个包含上述所有命令的文件,并从parallel
一个选项开始从文件中读取命令?
像这样的东西:
parallel -XX myFileWithCommands.txt
答案1
创造myFileWithCommands.txt
:
php index.php import file1 --offline
php index.php import file2 --deleteUnused
php index.php import file3
然后运行平行线像这样:
parallel -j 3 -- < myFileWithCommands.txt
答案2
嗯,我可以想象有两种简单的方法可以实现这一点。您可以将文件的内容通过管道传输到 中parallel
,也可以编写 shell 脚本。如果您想要完成的只是这组特定的任务,那么 shell 脚本可能更有意义。这将是非常简短、甜蜜且切中要点的:
#!/bin/sh
parallel -j 3 -- "php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"
现在,如果您想要更通用的东西(即,您可以将多组命令作为一组加载),那么提出一个简单的文件格式然后通过管道传输文件的内容可能会更容易进入parallel
。
最简单的方法是让文本包含您希望运行的逐字命令。
例如,如果这是您的文本文件 ( test.txt
):
"php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"
然后,您可以运行以下命令,它可能会正常工作:
$ cat test.txt | parallel -j 3 --
您还可以尝试使用稍微复杂的文件格式(例如,每个命令都在新行上并且不被引号括起来)。如果您要走这条路,则需要在将文件传输到之前对文件进行一些小的解析,parallel
这可以很容易地完成,例如awk
.
但是,如果您决定创建类似的更灵活的文件格式,那么创建一个帮助程序 shell 脚本(或函数)可能会有所帮助,这样您就不必awk '<whatever patterns you match> { do something }' | parallel -j3 --
每次都进行键入。