1

我有一个在两台计算机上运行的脚本。代码的第一行如下所示:

#!/usr/bin/gnuplot -p

在第二台计算机上,我想使用存储在$HOME/bin/gnuplot.

$HOME/bin包含在第二台计算机的$PATH变量中,因此我尝试使用对 GNUplot 的通用调用来启动脚本:

#!gnuplot -p

但这不起作用,因为脚本随后搜索了./gnuplot.

有没有办法使两台计算机的标题行相同?我希望解决方案以某种方式包含在这一行中,而不需要脚本来区分计算机或让我告诉它它在哪台计算机上。

4

3 回答 3

1

#!/usr/bin/env gnuplot是表达解释器的一种更便携的方式,如herehere所述。

但是,这会带来一个您可能没有预料到的问题。

#!/usr/bin/gnuplot -p

制作一个持久的 GNUplot 窗口,但正在运行

#!/usr/bin/env gnuplot -p

这似乎是明显的便携式替代方案行不通。

这里讨论了造成这种情况的一些原因,但似乎并没有真正的解决方法:争论和/usr/bin/env不相处。

-p标志的特殊情况下,最好使用

#!/usr/bin/env gnuplot

然后包括该行

set term x11 persist

在你的 GNUplot 脚本中,它会做同样的事情。

于 2013-03-05T21:25:16.960 回答
1

#!/usr/bin/env gnuplot使其更便携

于 2013-03-05T21:06:53.500 回答
0

显而易见的解决方案是

#!/usr/bin/env gnuplot

有关此方法的优缺点的一些讨论,请参阅此问题我的回答。

但是在您的情况下,您需要将-p参数传递给gnuplot-- 并且该#!行不处理该语法。您可以使用

#!/usr/bin/gnuplot -p

但如果你尝试:

#!/usr/bin/env gnuplot -p

它可能会尝试执行一些名为gnuplot -p的东西,这当然不存在(它"gnuplot -p"作为单个参数传递给/usr/bin/env)。

我使用的一个解决方案是编写一个安装脚本来修改#!每个系统的行。弄清楚如何做到这一点留作练习。

如果您的主目录在两台计算机上具有相同的完整路径名,您可以这样做:

#!/home/yourname/bin/gnuplot -p

gnuplot居住的计算机上$HOME/bin,这正是您想要的。另一方面,在您要使用的地方/usr/bin/gnuplot,创建$HOME/bin/gnuplot一个符号链接到/usr/bin/gnuplot

ln -s /usr/bin/gnuplot ~/bin/gnuplot

如果您不想$HOME/bin在两台机器上弄乱您的目录,或者如果您$HOME的完整路径名不同,请选择其他目录。例如,您可以将它安装在/tmp/yourname/bin两台机器上:

mkdir -p /tmp/yourname/bin
ln -s /usr/bin/gnuplot /tmp/yourname/bin/gnuplot # on one machine, OR
ln -s ~/bin/gnuplot /tmp/yourname/bin/gnuplot    # on the other

并使用:

#!/tmp/yourname/bin/gnuplot -p
于 2013-03-05T21:24:12.407 回答