期望脚本获取其目录?

期望脚本获取其目录?

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

相关内容