获取Steel Bank Common Lisp中当前正在执行的脚本的路径

问题描述 投票:3回答:2

我正在从系统的各个位置调用CL脚本。如何获取当前正在执行的脚本的文件路径?

例如,脚本源文件位于/home/user/project/source/目录中。通过以下方式从/home/user/目录执行脚本:

user@machine:~$ ./project/source/script.lsp

无论调用者所在的位置如何,脚本都应该知道它位于/home/user/project/source/目录中。

我尝试使用*default-pathname-defaults*变量,但是以下命令显示了调用脚本的目录:

(format t "Pathname: ~S~&" *default-pathname-defaults*)

环境:SBCL 1.4.5.debian在Ubuntu 18.04上。

lisp common-lisp sbcl
2个回答
6
投票

*load-truename**compile-file-truename*变量分别绑定到正在加载或编译时用cl:load加载或用cl:compile-file编译的文件的真实名称。

在您的情况下,*load-truename*是要使用的东西。它将为脚本提供完整的绝对路径名。


-1
投票

我在浏览另一个问题时偶然发现one possible answer

正如@Andrei所指出的,可以使用以下表达式读取脚本的完整路径名:

; truename function expands relative path to the script stored in $_ variable
(truename (sb-ext:posix-getenv "_"))

由于此解决方案依赖于$_环境变量和bash shell,因此它可能无法移植,就像@DmitryGrigoryev在this answer at unix.stackexchange.com中指出的那样。

© www.soinside.com 2019 - 2024. All rights reserved.