예를 들어 다음 명령
gnuplot -e "splot [x=-3:3] [y=-3:3] sin(x)*cos(y)"
GNUPLOT 5.4p5를 사용하여 Windows 10에서 완벽하게 작동합니다. 하지만 GNUPLOT 5.4p1이 설치된 Debian Bullseye 상자에서는 다음 오류만 표시됩니다.
line 0: undefined variable:
인수 없이 GNUPLOT을 실행하고 GNUPLOT 명령 프롬프트에서 동일한 명령을 실행하면 플롯이 있는 창이 나타납니다.
이것은 일종의 명령줄 구문 분석 문제입니까, 아니면 문자 집합/로캘과 관련된 문제입니까?
답변1
내 자신의 질문에 답하면서 마침내 문제가 무엇인지 알아냈기 때문입니다: UTF-8 금칙 공백 시퀀스( c2 a0
).
다른 Debian Bullseye 시스템에서 동일한 명령을 실행했는데 약간 다른 결과가 나왔습니다.
line 0: undefined function: sin
시스템이 이전에 시도한 것과 동일하기 때문에 이는 더욱 의심스러워 보입니다. 또한 이전의 잘못된 공백은 sin
구문 분석/문자 인코딩과 관련된 것이지 잘못된 구문 등이 아니라는 것을 암시합니다.
]
및 사이의 공백을 제거하고 다시 입력해 보니 sin
문제가 해결되었습니다.
내가 미쳤는지 확인하기 위해 터미널 출력을 텍스트 파일에 복사했습니다 log.txt
.
% cat log.txt
% gnuplot -e "splot [x=-3:3] [y=-3:3] sin(x)*cos(y)"
line 0: undefined function: sin
% gnuplot -e "splot [x=-3:3] [y=-3:3] sin(x)*cos(y)"
(plot window appears and disappears)
hexdump로 덤프합니다.
% hexdump -C log.txt
00000000 25 20 67 6e 75 70 6c 6f 74 20 2d 65 20 22 73 70 |% gnuplot -e "sp|
00000010 6c 6f 74 20 5b 78 3d 2d 33 3a 33 5d 20 5b 79 3d |lot [x=-3:3] [y=|
00000020 2d 33 3a 33 5d c2 a0 73 69 6e 28 78 29 2a 63 6f |-3:3]..sin(x)*co|
00000030 73 28 79 29 22 0a 6c 69 6e 65 20 30 3a 20 75 6e |s(y)".line 0: un|
00000040 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e |defined function|
00000050 3a 20 c2 a0 73 69 6e 0a 25 20 67 6e 75 70 6c 6f |: ..sin.% gnuplo|
00000060 74 20 2d 65 20 22 73 70 6c 6f 74 20 5b 78 3d 2d |t -e "splot [x=-|
00000070 33 3a 33 5d 20 5b 79 3d 2d 33 3a 33 5d 20 73 69 |3:3] [y=-3:3] si|
00000080 6e 28 78 29 2a 63 6f 73 28 79 29 22 0a |n(x)*cos(y)".|
0000008d
이는 범인을 찾아내는 데 도움이 됩니다.
00000020 .. .. .. .. .. c2 a0 ..
답변2
명령을 사용하고 Gnuplot 매뉴얼을 따르십시오.
-e "command"는 계속하기 전에 gnuplot에 해당 단일 명령을 실행하도록 지시합니다.
"계속"은 Gnuplot이 파일이 제공될 것으로 예상하고 이를 기다린다는 의미입니다. 명령 끝에 간단한 하이픈을 추가하면 Gnuplot이 입력 파일을 로드하는 대신 stdin에서 입력을 예상해야 함을 알립니다. 또한 제공한 명령을 실행한 후 대화형 셸 환경으로 이동하게 됩니다.
$ gnuplot -e "splot [x=-3:3] [y=-3:3] sin(x)*cos(y)" -
gnuplot>
[이 기사를 최대한 가볍게 만들기 위해 여기서 줄거리 출력을 표현하는 것은 아닙니다. ]