相对于当前脚本而不是相对于工作目录加载q文件
我想加载与我当前所在的源文件相关的 aq 脚本,而不管 q 进程启动时我在哪里。
例如,我有以下项目:
- myproject/
a.q
b.q
在a.q我的某处有以下几行:
...
system"l b.q";
...
我的问题是,这仅在我cd进入myproject/时才有效,因此它b.q位于当前工作目录中。
我希望能够在不使用绝对路径的情况下b.q从a.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在上面的示例中。希望这样的功能可以在这方面给你更多的灵活性。