我得到了一個包含數千個 curl post 命令的檔案。我需要以 100 個為一組運行它們。
輸入檔案包含所有命令。
curl -v -XPOST -H "Content-type:application/json" -d '{"k1":"v1","k2":"v2"}' http://localhost:8080/v1/SomeEndPoint
curl -v -XPOST -H "Content-type:application/json" -d '{"k3":"v3","k4":"v4"}' http://localhost:8080/v1/SomeEndPoint
curl -v -XPOST -H "Content-type:application/json" -d '{"k5":"v5","k6":"v6"}' http://localhost:8080/v1/SomeEndPoint
我嘗試了以下命令,即使使用 -n1 引數,它也沒有將整行視為引數,而是將其拆分為空格或將整個檔案作為輸入而不是單行。
xargs -n1 -P100 -p bash -c < inputFile
Output
bash -c curl?...
bash -c -v?...
bash -c -XPOST?...
bash -c -H?...
bash -c Content-type:application/json?...
xargs -n1 -0 -P100 -p bash -c < inputFile
Output
bash -c curl -v -XPOST -H "Content-type:application/json" -d '{"k1":"v1","k2":"v2"}' http://localhost:8080/v1/SomeEndPoint
curl -v -XPOST -H "Content-type:application/json" -d '{"k1":"v1","k2":"v2"}' http://localhost:8080/v1/SomeEndPoint?...
我如何為每一行輸入檔案運行它?
uj5u.com熱心網友回復:
如果每一行都是一個完全構造的命令,xargs就是錯誤的工具。
這兩個都可以作業:
sed -n 1,100p inputFile | while read line; do eval "$line"; done
sed -n 1,100p inputFile | while read line; do echo "$line" | sh; done
uj5u.com熱心網友回復:
當然不是最優雅的解決方案,但它可以作業:
input_file=test.sh
batch_size=100
nlines=$(wc -l $input_file | cut -f 1 -d ' ')
for i in $(seq 1 $batch_size $nlines); do
for j in $(seq $i $((i batch_size))); do
line="$(sed -n ${j}p $input_file)"
eval "$line" &
done
wait
done
它需要一批 n 行,并在后臺單獨執行它們eval。在每個批處理之后,它等待每個后臺行程終止(wait)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416875.html
標籤:
下一篇:為什么read沒有正常的手冊頁?
