需要在bash脚本中编写一些状态检查器:
具有这样的字符串文件:
domain.com; 111.111.111.111,222.222.222.222; /link/to/somefile.js,/link/to/somefile2.js
domain2.com; 122.122.111.111,211.211.222.222; /link/to/somefile2.js,/link/to/somefile3.js
总共需要执行这样的命令:
curl -s -I -H 'Host: domain.com' http://111.111.111.111/link/to/somefile.js
curl -s -I -H 'Host: domain.com' http://222.222.222.222/link/to/somefile.js
curl -s -I -H 'Host: domain.com' http://111.111.111.111/link/to/somefile2.js
curl -s -I -H 'Host: domain.com' http://222.222.222.222/link/to/somefile2.js
curl -s -I -H 'Host: domain2.com' http://122.122.111.111/link/to/somefile2.js
curl -s -I -H 'Host: domain2.com' http://211.211.222.222/link/to/somefile2.js
curl -s -I -H 'Host: domain2.com' http://122.122.111.111/link/to/somefile3.js
curl -s -I -H 'Host: domain2.com' http://211.211.222.222/link/to/somefile3.js
问题是:
xargs
可以这样做还是gnu parallel
? 我可以分隔行并将结果设置为根本没有问题的不同变量:
domain=$(cut -d';' -f1 file| xargs -I N -d "," echo curl -H) \'N\'
ip=$(cut -d';' -f2 file| xargs -I N -d "," echo curl -H) \'N\'
and else
但是其他问题:): 在将字符串分隔并分隔为变量之后,如何在那种情况下使用不同的变量执行curl-不同变量的参数数量会有所不同?
得到Barmar的答案根本没有涵盖任务问题,因为它具有两个以上的列表。问题不在于bash的无知,而是可以解决问题的方式
答案 0 :(得分:0)
log_command
...作为输出(作为命令列表,如果删除了curl -s -I -H Host:\ domain.com http://111.111.111.111//link/to/somefile.js
curl -s -I -H Host:\ domain.com http://222.222.222.222//link/to/somefile.js
curl -s -I -H Host:\ domain.com http://111.111.111.111//link/to/somefile2.js
curl -s -I -H Host:\ domain.com http://222.222.222.222//link/to/somefile2.js
curl -s -I -H Host:\ domain2.com http://122.122.111.111//link/to/somefile2.js
curl -s -I -H Host:\ domain2.com http://211.211.222.222//link/to/somefile2.js
curl -s -I -H Host:\ domain2.com http://122.122.111.111//link/to/somefile3.js
curl -s -I -H Host:\ domain2.com http://211.211.222.222//link/to/somefile3.js
前缀则将运行):
domain
...如您在https://ideone.com/dTC8q8上看到的
现在如何运作?
步骤1:将每一行读入addrs_str
,files_str
和IFS='; ' read -r domain addrs_str files_str
中,并用分号和空格分隔。
这是行addrs_str
的工作,该行的工作如BashFAQ #1和How to read variables from file, with multiple variables per line?
files_str
和curl
,将它们以逗号分隔为单独的数组。 How do I split a string on a delimiter in Bash? PRAGMA temp_store = MEMORY;
DROP TABLE IF EXISTS TempQuery;
CREATE TEMP TABLE TempQuery AS SELECT ID FROM Person WHERE (Firstname LIKE '%mil%' OR LastName LIKE '%%');
SELECT rowid FROM TempQuery WHERE ID = '48a0231a-af41-450d-a291-5912d39119c9' LIMIT 1;
。如果只想用第一个文件调用第一个IP,而用第二个文件调用第二个IP,则可以使用Iterate over two arrays simultaneously in bash;否则,这是一个普通的嵌套循环。答案 1 :(得分:0)
使用GNU Parallel,它看起来像这样
doit() {
domain="$1"
ips="$2"
paths="$3"
parallel --dry-run -d ',' -q curl -s -I -H Host:\ "$domain" http://{1}/{2} ::: "$ips" ::: "$paths"
}
export -f doit
parallel --colsep ';' doit :::: input.file
确信您可以删除--dry-run
。