相对于当前脚本而不是相对于工作目录加载q文件

我想加载与我当前所在的源文件相关的 aq 脚本,而不管 q 进程启动时我在哪里。

例如,我有以下项目:

- myproject/
    a.q
    b.q

a.q我的某处有以下几行:

...
system"l b.q";
...

我的问题是,这仅在我cd进入myproject/时才有效,因此它b.q位于当前工作目录中。

我希望能够在不使用绝对路径的情况下b.qa.q哪里开始加载脚本

(在 python 中,我可以这样做,例如使用os.path.realpath()

回答

实现这一目标的一种方法是使用环境变量。您可以在使用 bash 中的 export 命令启动 aq 会话之前设置这些。在这里为您提供一个快速示例:

$ export TABLE=/home/mclark/tab.q
$ q

q)getenv[`TABLE]
"/home/mclark/tab.q"

这样就可以保存文件的绝对路径,您可以以类似的方式加载脚本。

如果您不想使用环境变量,则可以开始使用.z.o.z.f。这是一个快速示例,我正在加载一个包含字典的文件dict

$ q path/a.q
q)dict
'dict
  [0]  dict
       ^
q)loadfunc:{system"l ",(first system $[.z.o like "w*";"cd";"pwd"]),"/",(1_string first ` vs hsym .z.f),"/",x}
q)loadfunc"example.q"
q)dict
a| 1
b| 2

.z.f将打印在启动 q 进程时传入的 q 脚本的名称,因此 `path/a.q在上面的示例中。希望这样的功能可以在这方面给你更多的灵活性。


以上是相对于当前脚本而不是相对于工作目录加载q文件的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>