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

当输入脚本中的任何命令失败时,如何退出gnuplot?,gnuplot,Gnuplot,我正在尝试编写gnuplot脚本以输出png 我依靠用户给我输出文件名。如果用户输入了无效的文件名,gnuplot最终会将png打印到标准输出。终端通常不喜欢这种压力。有时,即使是reset也无法恢复我的外壳 如果任何命令出错,是否有方法中止所有处理?我将寻找一个全局错误变量(laerrno)或一个全局错误事件,我可以为其分配一个函数 或者,是否有一种方法可以中止前一个命令结果的处理测试(有点像if[$?-ne 0];then) 最后,如果这是唯一的选项,只需检测我的设置终端失败,并退回到其他非

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

我依靠用户给我输出文件名。如果用户输入了无效的文件名,gnuplot最终会将png打印到标准输出。终端通常不喜欢这种压力。有时,即使是
reset
也无法恢复我的外壳

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

或者,是否有一种方法可以中止前一个命令结果的处理测试(有点像
if[$?-ne 0];then

最后,如果这是唯一的选项,只需检测我的
设置终端
失败,并退回到其他非标准输出


显然,我将尝试“触摸”输出以验证其可写性,但我希望有一个更通用的解决方案。

如果gnuplot遇到错误,它将存储在变量
GPVAL\u ERRNO
(错误号-默认值为0)和
GPVAL\u ERRMSG
(错误消息-默认值为

因此,您可以测试脚本中的错误:

if (GPVAL_ERRNO != 0) exit

正如bibi在评论中提到的,当将输出设置为无效文件时,将抛出一个错误,但不会设置这些值(我怀疑错误发生在比gnuplot解释器“更深”的地方,这就是原因)。据我所知,这是唯一一次这不会被设置

但是,也有存储终端设置的变量:
GPVAL\u TERM
(当前终端)、
GPVAL\u TERM选项
(终端的当前选项)和
GPVAL\u输出
(当前输出文件)

例如,如果我发出
set term png
,然后发出
set output“test.png”
,则值分别为
“png”
“nocrop enhanced size 640480 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源as中报告为错误,并已将修复程序添加到当前开发版本中。

如果gnuplot遇到错误,它将存储在变量
GPVAL\u ERRNO
中(错误号-默认值为0)和
GPVAL\u ERRMSG
(错误消息-默认值为

因此,您可以测试脚本中的错误:

if (GPVAL_ERRNO != 0) exit

正如bibi在评论中提到的,当将输出设置为无效文件时,将抛出一个错误,但不会设置这些值(我怀疑错误发生在比gnuplot解释器“更深”的地方,这就是原因)。据我所知,这是唯一一次这不会被设置

但是,也有存储终端设置的变量:
GPVAL\u TERM
(当前终端)、
GPVAL\u TERM选项
(终端的当前选项)和
GPVAL\u输出
(当前输出文件)

例如,如果我发出
set term png
,然后发出
set output“test.png”
,则值分别为
“png”
“nocrop enhanced size 640480 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源代码as中报告为错误,并且已在当前开发版本中添加了修复程序。

您是否考虑过在将文件名交给gnuplot之前让脚本验证文件名?是的,我将这样做。。。但这并不能保护我免受其他输入错误的影响。想象一下,我希望用户配置行样式,这需要花费大量的精力进行验证(尽管危害较小)。您还可以将gnuplot的
stdout
重定向到
/dev/null
,或者通过过滤器进行清理。我检查了文档,看起来错误被打印到了
stderr
-这使得
/dev/null
确实非常吸引人。据我所知,gnuplot没有类似于
errno
$?
的功能,但是我对这个评估没有足够的信心来回答这个问题。你有没有考虑过让你的脚本在交给gnuplot之前验证文件名?是的,我会这样做。。。但这并不能保护我免受其他输入错误的影响。想象一下,我希望用户配置行样式,这需要花费大量的精力进行验证(尽管危害较小)。您还可以将gnuplot的
stdout
重定向到
/dev/null
,或者通过过滤器进行清理。我检查了文档,看起来错误被打印到了
stderr
-这使得
/dev/null
确实非常吸引人。据我所知,gnuplot没有类似于
errno
$?
的功能,但我对这一评估没有足够的信心来回答这个问题。