找不到TCL解释器正在执行的脚本的路径,因为info脚本返回空字符串

找不到TCL解释器正在执行的脚本的路径,因为info脚本返回空字符串,tcl,quartus,Tcl,Quartus,我需要TCL解释器执行的脚本的路径。我使用了info脚本,但它返回空字符串!我也尝试过使用shell命令,但由于我还不了解的原因,它们在tcl解释器程序中根本不起作用。我正试图在英特尔Quartus Prime标准中的系统控制台中实现这一点 还有什么选择?我正在使用GUI,并从选择“执行脚本”命令后出现的窗口中选择脚本。您需要 pwd 返回当前工作目录的绝对路径 资料来源: 因此,您可能应该这样做: set current_path [file nativename [pwd]] 再见您只能

我需要TCL解释器执行的脚本的路径。我使用了info脚本,但它返回空字符串!我也尝试过使用shell命令,但由于我还不了解的原因,它们在tcl解释器程序中根本不起作用。我正试图在英特尔Quartus Prime标准中的系统控制台中实现这一点

还有什么选择?我正在使用GUI,并从选择“执行脚本”命令后出现的窗口中选择脚本。

您需要

pwd
返回当前工作目录的绝对路径

资料来源:

因此,您可能应该这样做:

set current_path [file nativename [pwd]]

再见

您只能在Tcl文件处于活动运行状态时从info脚本中获取有用的信息,而不是在调用它稍后定义的过程时。将其放入源文件中是很常见的:

变量thisFile[文件规范化[信息脚本]] 规范化将转换为绝对路径,并对所有符号链接进行排序 当文件还定义了一个名称空间时,这种方法非常有效,这是任何含糊不清的库代码的常见良好实践

但是如果你还没有,你还能做什么呢?好如果您有8.6或更高版本,那么您可以选择

% parray tcl_platform
tcl_platform(byteOrder)     = littleEndian
tcl_platform(engine)        = Tcl
tcl_platform(machine)       = x86_64
tcl_platform(os)            = Darwin
tcl_platform(osVersion)     = 20.4.0
tcl_platform(pathSeparator) = :
tcl_platform(platform)      = unix
tcl_platform(pointerSize)   = 8
tcl_platform(threaded)      = 1
tcl_platform(wordSize)      = 8
% dict get [tcl::unsupported::getbytecode proc parray] sourcefile
/opt/local/lib/tcl8.6/parray.tcl

如果您真的喜欢字符串处理,还可以从tcl::unsupported::discomble的结果中选择信息,但是getbytecode更容易。Tcl 8.5及更早版本中没有此信息,getbytecode中也没有此信息。

当堆栈上没有活动的源代码或C API等效代码时,info script命令返回空字符串。@DonalFillows在starkit可执行文件中以这种方式使用info script是否正确?我使用它主要是为了获取内部VFS的根路径,这样我就可以将存储在内部的文件复制到外部真正的文件系统中。@Losko它在任何地方都是正确的;整个VFS抽象的一个特点是,虚拟化时的工作方式与在真实文件系统上的工作方式几乎相同。只有少数事情,比如文件被传递到其他程序或原始操作系统调用,你不能这样做。这似乎不起作用,因为它只是给了我通往解释器的路径。看到Intel Quartus Prime系统控制台不能正确执行此操作,我感到相当惊讶。我现在也将对此进行研究。我错误地认为$::argv0将是治疗我所有疾病的良药。