Várias operações de arquivo no TCL são organizadas sob o procedimento file(n)
que tem um comando dirname
.
% expect
expect1.1> file dirname $argv0
.
Note, no entanto, que isto pode não ser definido, válido, nem verificado quanto à validade, dependendo de como o TCL (nem o código shell) é executado, então você pode querer verificar o erro; o diretório também irá variar dependendo de como o código é executado.
% cat dirname
#!/usr/bin/env expect
set basedir [file dirname $argv0]
puts $basedir
% chmod +x dirname
% ./dirname
.
% ~/tmp/dirname
/Users/jhqdoe/tmp
%
Use file normalize
se você sempre quiser um caminho completo.
% expect
expect1.1> set basedir [file normalize [file dirname $argv0]]
/Users/jhqdoe/tmp
Existe também a chamada Tcl_FindExecutable(3)
, que expõe o nome do executável ( se disponível) através do comando info nameofexecutable
:
% expect
expect1.1> info nameofexecutable
/opt/local/bin/expect