我正在尝试编写gnuplot脚本以输出png。
我依靠用户给我输出文件名。如果用户输入的文件名无效,gnuplot最终会将png打印到stdout。终端通常不喜欢这种压力。有时甚至reset
都无法将我的贝壳带回来。
如果有任何命令出错,有没有办法中止所有处理?我正在寻找一个全局错误变量(la errno
)或我可以为其分配函数的全局错误事件。
或者,有没有办法中止前一个命令的结果处理测试(有点像if [ $? -ne 0 ]; then
)。
最后,如果这是唯一的选择,只需检测我的set terminal
失败并回退到其他非stdout。
显然,我会尝试“触摸”输出以验证它是否可写,但我想要一个更通用的解决方案。
答案 0 :(得分:2)
如果gnuplot遇到错误,它将存储在变量GPVAL_ERRNO
(错误号 - 默认值为0)和GPVAL_ERRMSG
(错误消息 - 默认为""
)中。
因此,您可以在脚本中测试错误:
if (GPVAL_ERRNO != 0) exit
正如bibi在评论中提到的,当将输出设置为无效文件时,将抛出错误但不会设置这些值(我怀疑错误发生在比gnuplot解释器更“深”的某处)。据我所知,这是唯一不会设置的时间。
但是,还有变量存储终端设置:GPVAL_TERM
(当前终端),GPVAL_TERMOPTIONS
(终端的当前选项)和GPVAL_OUTPUT
(当前输出)文件)。
例如,如果我发出set term png
后跟set output "test.png"
,则值分别为"png"
,"nocrop enhanced size 640,480 font \"arial,12\" "
和"test.png"
。
当输出设置为 STDOUT 时,GPVAL_OUTPUT
的值为""
(空字符串)。所以我们可以测试空字符串以确定我们是否能够设置输出文件名。
set output some_invalid_file
if (GPVAL_OUTPUT == "") exit
Gnuplot的if命令允许包含多行的主体的括号表达式,因此我们也可以向用户打印警告:
if (GPVAL_OUTPUT = "") {
print "Stop giving invalid file names!!!"
exit
}
注意: 设置输出未提及错误代码时提到的问题已被报告为gnuplot源中的错误bug number 1741并且修复了已被添加到当前的开发版本中。