쉘 스크립트를 사용하여 gnuplot에서 명령을 실행하는 방법은 무엇입니까?


10

내가하고 싶은 것은 먼저 프로그램을 시작한 다음 많은 명령을 실행 한 다음 종료하라는 스크립트를 작성하는 것입니다. 예를 들어 봅시다.

이 스크립트를 작성했는데 myscript.sh원하는 방식으로 작동하지 않습니다. gnuplot을 실행하고 종료 될 때까지 기다렸다가 다른 명령을 실행하면됩니다. 분명히 오류가 발생합니다.

#!/bin/bash
gnuplot
plot sin(x)
pause -1
quit

내가하려는 일이 분명하다고 생각합니다. 그렇지 않은 경우 의견에 알려주십시오.

답변:


12

에서 man gnuplot또는 온라인 맨 페이지 :

   -p,  --persist  lets  plot  windows  survive after main gnuplot program
   exits.

   -e "command list" executes the requested commands  before  loading  the
   next input file.

따라서 아마도 다음과 같은 명령을 실행하고 싶을 것입니다.

gnuplot -e "plot sin(x); pause -1"

내가 제안했지만 그다지 유용하지 않은 다른 변형은 다음과 같습니다.

gnuplot -p -e "plot sin(x); pause -1"
gnuplot -e "plot sin(x)"
gnuplot -p -e "plot sin(x)"

처음 2는 정확히 원하는 출력을 생성합니다. 하지만이 -p이 예에서는 많이 사용되지 않습니다; 터미널에서 Enter 키를 누르면 gnuplot이 종료되고 quit 명령을 제외하고 플롯 창이 대화식이 아닙니다. 3의 출력은 그냥왔다 갔다합니다 (아무 표시되지 않습니다). 마지막 것은 출력을 생성하지만 gnuplot이 즉시 닫히기 때문에 플롯 창이 다시 대화식이 아닙니다 (작은 1square cm 플롯도 표시됨). 그래서 pause -1필요하다.
Mihir Gadgil

@MihirGadgil 의견을 보내 주셔서 감사합니다. 내 답변을 수정했습니다.
바이트 사령관

16

한 가지 방법은 다음과 -persist같습니다.

#!/usr/bin/gnuplot -persist
set title "Walt pedometer" font ",14" textcolor rgbcolor "royalblue"
set timefmt "%y/%m/%d"
set xdata time
set pointsize 1
set terminal wxt  enhanced title "Walt's steps " persist raise
plot "/home/walt/var/Pedometer" using 1:2 with linespoints

데이터를 전처리해야하는 다른 방법은 Bash를 사용하는 것입니다 Here Document(참조 man bash).

#!/bin/bash
minval=0    # the result of some (omitted) calculation
maxval=4219   # ditto
gnuplot -persist <<-EOFMarker
    set title "Walt pedometer" font ",14" textcolor rgbcolor "royalblue"
    set timefmt "%y/%m/%d"
    set yrange $minval:$maxval
    set xdata time
    set pointsize 1
    set terminal wxt  enhanced title "Walt's steps " persist raise
    plot "/home/walt/var/Pedometer" using 1:2 with linespoints
EOFMarker
# rest of script, after gnuplot exits

1
이 방법 ( "here-doc"쉘 방법)은 아마도 OP가 찾은 일반적인 대답 일 것입니다. 그것은 많은 명령 중심의 프로그램에서 작동합니다. (그렇지 않다면, 다음 단계로 확대 할 수 있습니다 expect.
Rmano

또한 yrange :에서 잊어 버린 메모만으로 스크립트를 chmod u+x myscript.gnu실행하고 직접 실행할 수 있습니다 . ./myscript.gnu[]set yrange [$minval:$maxval]
Hastur

3

에서 설명하고있는 바와 같이 man페이지 , gnuplot소위의 명령 파일에서 입력을 기대 배치 세션 . 예를 들어 줄 plot sin(x)을 파일에 쓴 myplot다음 실행할 수 gnuplot myplot있습니다.

스크립트와 마찬가지로 명령 파일을 생략하면 대화식 세션이 표시 됩니다.


좋아, 대화 형 세션으로 뛰어 들었지만 동일한 sctipt를 통해 대화 형 세션에 명령을 공급할 방법이 없습니까? 또한 더 일반적인 답변을 줄 수 있습니까 (gnuplot에만 국한되지 않음)? 감사!
Mihir Gadgil

모든 응용 프로그램이 동일한 방식으로 입력을 처리하는 것은 아닙니다. 그것을 일반화 할 방법이 없습니다.
Jos

@MihirGadgil-모든 프로그램이 같은 방식으로 작동하는 것은 아닙니다. 다른 프로그램을 사용 하시겠습니까?
Wilf

@Jos 아, 감사합니다! 윌프 나는 과거에 리눅스를 사용했지만 광범위하게 사용하지는 않았지만 이제는 더 많은 것을 배우려고 노력했다. 그런 프로그램을 염두에두고 있지 않습니다. 이 한 가지 문제에서 최대한 많이 배우려고 노력했습니다.
Mihir Gadgil

0

언급 된 here-doc 방법은 Gnuplot 및 기타 여러 프로그램에서도 매우 유용합니다. here-doc의 Gnuplot 명령 내에서 쉘 변수를 사용하여 쉘 스크립트 명령 행의 입력으로 플롯을 매개 변수화 할 수 있습니다. 신중하게 설정하면 광대 한 "빅 데이터"팀에서 줄거리를 대량 생산할 수 있습니다. 필자는이 방법을 사용하여 수백 개의 구조 역학 유한 분석 실행에서 PLOT 당 20,000 ~ 80,000 포인트로 일관된 모양의 산점도를 생성했습니다. 매우 강력한 방법입니다.


1
답변을 완성시키기 위해 여기에 언급 된 here-doc 방법을 사용하는 방법에 대한 예를 추가 할 수 있습니까?
Melebius

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.