bash 脚本可以,BASEDIR=$(dirname $0)
但我如何在 Expect 脚本中做到这一点?
如果我使用,BASEDIR=[dirname $argv0]
我会收到错误“无效的命令名“dirname”。
答案1
TCL中的各种文件操作都组织在file(n)
有dirname
命令的程序。
% expect
expect1.1> file dirname $argv0
.
但请注意,这可能无法设置、有效或检查有效性,具体取决于 TCL(也不是 shell 代码)的运行方式,因此您可能需要错误检查;该目录也会根据代码的运行方式而有所不同。
% cat dirname
#!/usr/bin/env expect
set basedir [file dirname $argv0]
puts $basedir
% chmod +x dirname
% ./dirname
.
% ~/tmp/dirname
/Users/jhqdoe/tmp
%
file normalize
如果您始终想要完全限定的路径,请使用。
% expect
expect1.1> set basedir [file normalize [file dirname $argv0]]
/Users/jhqdoe/tmp
还有Tcl_FindExecutable(3)
调用,它通过以下方式公开可执行文件名称(如果可用)info nameofexecutable
命令:
% expect
expect1.1> info nameofexecutable
/opt/local/bin/expect