Gnuplot脚本:使用相对于文件的路径而不是执行目录?

Gnuplot脚本:使用相对于文件的路径而不是执行目录?,gnuplot,Gnuplot,我正在与需要打印的.dat文件相同的文件夹中生成一个Gnuplot脚本,我希望它能够工作,即使它是从不同的目录调用的。不幸的是,相对路径似乎来自于调用Gnuplot的目录,而不是脚本文件所在的目录。例如: gnuplot folder/script.gp 如果文件为文件夹/data.dat且脚本显示打印“data.dat”,则将失败。有没有办法绕过这个问题?像Gnuplot中保存当前执行脚本位置的变量一样 set loadpath "wherever/my/stuff/is/" 这可以是绝对

我正在与需要打印的
.dat
文件相同的文件夹中生成一个Gnuplot脚本,我希望它能够工作,即使它是从不同的目录调用的。不幸的是,相对路径似乎来自于调用Gnuplot的目录,而不是脚本文件所在的目录。例如:

gnuplot folder/script.gp
如果文件为
文件夹/data.dat
且脚本显示
打印“data.dat”
,则将失败。有没有办法绕过这个问题?像Gnuplot中保存当前执行脚本位置的变量一样

set loadpath "wherever/my/stuff/is/"
这可以是绝对目录树,也可以是相对于当前目录的

或者,就像在shell命令行中一样,您可以告诉gnuplot

cd "/new/current/directory"

之后,它将首先查找文件。

您的目录和文件名之间的分隔符是
/
,因此我假设您在Linux上。以下工作:

  • 如果gnuplot是用脚本启动以执行的,则存在一个变量
    ARG0
    ,该变量包含命令行上指定的完整脚本名称
  • 通过
    系统
    调用,我们可以将此脚本名称发送回shell,shell有一个
    dirname
    命令,用于提取脚本名称的目录部分
  • 现在我们可以使用gnuplot内部字符串函数来构建文件路径,特别是连接两个字符串的
您说过您有一个gnuplot脚本
文件夹/script.gp
和一个数据文件
文件夹/data.txt
,那么脚本应该包含如下内容:

print ARG0       # just for debugging
working_directory = system("dirname ".ARG0)."/"
datafile = working_directory."data.dat"
outputfile = working_directory."graph.png"

print datafile   # just for debugging
print outputfile # just for debugging

set terminal pngcairo
set output outputfile
plot datafile w l
如果您在“文件夹”中,则
dirname
返回
,生成的数据文件将是
/data.dat
。我没有检查包含空格的“特殊”目录名。。。我不指望它会起作用


在Debian 9.6上使用gnuplot 5.0.5进行测试,gnuplot将sh shell用于
系统
。我没有搜索Windows解决方案。

问题在于,我希望它能够独立于整个文件夹是否移动而工作(在脚本和数据文件之间保持相同的相对路径,但更改绝对路径)。所以我希望有一个类似于Python的
\uuuu文件\uuuu
常量的东西,但它不是这样工作的。不适用于gnuplot,也不适用于python。如果您在发出shell命令时知道文件在哪里,那么另一种选择是(假设bash)
GNUPLOT_LIB=folder GNUPLOT script.gp
至少在Python中它绝对是这样工作的。您可以随时知道正在运行的当前文件的路径。例如,我使用了这个功能来确保数据文件相对于脚本的相对位置,即使我不知道软件包安装在哪里。噢,哇,谢谢!有点复杂,但是的,它是有效的。但对windows来说太糟糕了,我希望软件只是添加了这个。@Okarin我会很乐观地让它在windows上运行,但还没有尝试过。使用类似于
dirname windows批处理的Google会返回几个匹配项。我会更担心弄乱空白:)但我同意,gnuplot有这些信息,可以独立于操作系统提供。