我有一个脚本,我在两台计算机上运行。代码的第一行如下所示:
#!/usr/bin/gnuplot -p
在第二台计算机上,我想使用存储在$HOME/bin/gnuplot
的GNUplot版本。
$HOME/bin
包含在第二台计算机的$PATH
变量中,因此我尝试使用对GNUplot的泛型调用来启动脚本:
#!gnuplot -p
但这不起作用,因为该脚本随后搜索了./gnuplot
。
有没有办法让两台计算机的标题行相同?我希望解决方案以某种方式包含在那一行中,而不需要脚本来区分计算机或让我告诉它它在哪台计算机上。
答案 0 :(得分:1)
#!/usr/bin/env gnuplot
使其更加portable。
答案 1 :(得分:1)
#!/usr/bin/env gnuplot
是表达口译员的一种更便携的方式。
然而,这引入了一个你可能没想到的问题。
#!/usr/bin/gnuplot -p
创建一个持久的GNUplot窗口,但正在运行
#!/usr/bin/env gnuplot -p
这似乎是明显的便携式替代方案无效。
讨论了here的一些原因,但似乎没有办法解决它:争论和/usr/bin/env
并没有真正相处。
在-p
标志的特定情况下,最好使用
#!/usr/bin/env gnuplot
然后包含
行set term x11 persist
在您的GNUplot脚本中,它将执行相同的操作。
答案 2 :(得分:0)
显而易见的解决方案是
#!/usr/bin/env gnuplot
请参阅this question和my answer,了解此方法的优缺点。
但在您的情况下,您需要将-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