gnuplot: 스크립트에서 셸 변수를 설정한 다음 호출할 수 있나요?

gnuplot: 스크립트에서 셸 변수를 설정한 다음 호출할 수 있나요?

예를 들어 변수를 설정하기 위해 gnuplot 스크립트에서 셸 명령을 실행할 수 있기를 원하지만 해당 system명령은 gnuplot 스크립트를 실행하는 셸 인스턴스에 명령을 실행하는 대신 새 셸 인스턴스를 생성하는 것 같습니다. 첫 번째 줄에서는 할당을 허용 $foo하지만 두 번째 줄에서는 변수에 액세스할 수 없는 다음 스크립트를 참조하세요. 이 경우 $foo디렉토리에 대한 참조가 아닌 임의의 문자열로 할당되므로\"

#!/usr/bin/gnuplot -p
system "export foo=\"$HOME/path/to/dir\";echo $foo"
system "echo $foo"
set datafile separator "\t"
#plot "`echo $foo`/bar.dat" using 2:3
plot "<( sed '5p' $foo/bar.dat )" using 2:3

답변1

맞습니다. 각 명령은 완전히 새로운 셸을 시작하므로 Gnuplot이 다음 줄로 이동하면 system설정된 변수가 사라집니다.system "foo=bar"

귀하의 경우 매우 편리한 방법은 다음을 사용하는 것입니다.여기 문서.

foo="$HOME/path/to/dir"

gnuplot -p<<EOF
set datafile separator "\t"
plot '<(sed "5p" "$foo"/bar.dat)'
EOF

스크립트에 대한 몇 가지 참고 사항:

  • sed "5p" file이는 파일의 모든 라인이 그려지지만 라인 5는 복사된다는 의미입니다. 다섯 번째 행만 그리려면 다음을 사용하세요.sed -n "5p" file

  • 이는 Gnuplot을 호출하지만 여전히 쉘 스크립트이므로 항상 다음을 수행하는 것이 가장 좋습니다.참조 변수 (예 "$foo": ) 단어 분할을 방지합니다.

관련 정보