Gnuplot 명령 목록을 병렬로 실행하고 싶습니다.
"인식할 수 없는 옵션" 오류가 발생합니다.
$ ./parallel-plot-sine.sh | parallel -q gnuplot
unrecognized option -e "set terminal pngcairo; set output '100.png'; set title 'Sample rate: 100'; set key left box; set autoscale; set samples 100; plot [-30:20] sin(x)"
나는 이것이 입력된 명령에 Gnuplot이 만족하지 않는다는 것을 의미한다고 생각하지만 그 이유를 이해할 수 없습니다.
쉘 스크립트는 parallel-plot-sine.sh
Gnu Parallel에 입력될 명령을 구성합니다:
#!/bin/bash
# Compose command-lines to run in parallel
command_array=()
for fs in $(seq 100 100 1000); do
command_array+=("-e \"set terminal pngcairo; set output '${fs}.png'; set title 'Sample rate: $fs'; set key left box; set autoscale; set samples $fs; plot [-30:20] sin(x)\"")
done
# Print command strings to output for gnu parallel
for cmd in "${command_array[@]}"; do
printf "%s\n" "$cmd"
done
이것은 다음을 인쇄합니다:
$ ./parallel-plot-sine.sh
-e "set terminal pngcairo; set output '100.png'; set title 'Sample rate: 100'; set key left box; set autoscale; set samples 100; plot [-30:20] sin(x)"
-e "set terminal pngcairo; set output '200.png'; set title 'Sample rate: 200'; set key left box; set autoscale; set samples 200; plot [-30:20] sin(x)"
-e "set terminal pngcairo; set output '300.png'; set title 'Sample rate: 300'; set key left box; set autoscale; set samples 300; plot [-30:20] sin(x)"
-e "set terminal pngcairo; set output '400.png'; set title 'Sample rate: 400'; set key left box; set autoscale; set samples 400; plot [-30:20] sin(x)"
-e "set terminal pngcairo; set output '500.png'; set title 'Sample rate: 500'; set key left box; set autoscale; set samples 500; plot [-30:20] sin(x)"
-e "set terminal pngcairo; set output '600.png'; set title 'Sample rate: 600'; set key left box; set autoscale; set samples 600; plot [-30:20] sin(x)"
-e "set terminal pngcairo; set output '700.png'; set title 'Sample rate: 700'; set key left box; set autoscale; set samples 700; plot [-30:20] sin(x)"
-e "set terminal pngcairo; set output '800.png'; set title 'Sample rate: 800'; set key left box; set autoscale; set samples 800; plot [-30:20] sin(x)"
-e "set terminal pngcairo; set output '900.png'; set title 'Sample rate: 900'; set key left box; set autoscale; set samples 900; plot [-30:20] sin(x)"
-e "set terminal pngcairo; set output '1000.png'; set title 'Sample rate: 1000'; set key left box; set autoscale; set samples 1000; plot [-30:20] sin(x)"
이러한 명령은 다음과 같이 독립적으로 작동합니다.
gnuplot -e "set terminal pngcairo; set output '1000.png'; set title 'Sample rate: 1000'; set key left box; set autoscale; set samples 1000; plot [-30:20] sin(x)"
답변1
기본적으로 GNU는 인용된 입력을 병렬화합니다. 귀하가 제공한 입력 내용이 인용되었습니다. 몇 가지 솔루션이 있습니다.
입력 변경:
-e "set terminal pngcairo; set output '100.png'; set title 'Sample rate: 100'; set key left box; set autoscale; set samples 100; plot [-30:20] sin(x)"
도착하다:
set terminal pngcairo; set output '100.png'; set title 'Sample rate: 100'; set key left box; set autoscale; set samples 100; plot [-30:20] sin(x)
그리고 다음을 실행하세요:
... | parallel gnuplot -e
또는:
... | parallel eval gnuplot
# Requires version >= 20190722
... | parallel gnuplot {=uq=}