Bashスクリプトは機能しますBASEDIR=$(dirname $0)
が、Expectスクリプトではどのように実行しますか?
を使用すると、BASEDIR=[dirname $argv0]
"無効なコマンド名" dirname"エラーが発生します。
答え1
TCLのさまざまなファイル操作は、次のように構成されています。file(n)
コマンドを含むプログラムですdirname
。
% expect
expect1.1> file dirname $argv0
.
ただし、TCL(またはシェルコード)の実行方法によっては、有効性が設定されているか、無効であるか検証されない可能性があるため、コードの方法によってディレクトリも異なる可能性があるため、エラーチェックが必要になる場合があります。走る。
% 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