如果输入脚本中的任何命令失败,如何退出gnuplot?

时间:2016-02-17 15:14:43

标签: gnuplot

我正在尝试编写gnuplot脚本以输出png。

我依靠用户给我输出文件名。如果用户输入的文件名无效,gnuplot最终会将png打印到stdout。终端通常不喜欢这种压力。有时甚至reset都无法将我的贝壳带回来。

如果有任何命令出错,有没有办法中止所有处理?我正在寻找一个全局错误变量(la errno)或我可以为其分配函数的全局错误事件。

或者,有没有办法中止前一个命令的结果处理测试(有点像if [ $? -ne 0 ]; then)。

最后,如果这是唯一的选择,只需检测我的set terminal失败并回退到其他非stdout。

显然,我会尝试“触摸”输出以验证它是否可写,但我想要一个更通用的解决方案。

1 个答案:

答案 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并且修复了已被添加到当前的开发版本中。