디렉토리를 가져오는 스크립트를 기대하시나요?

디렉토리를 가져오는 스크립트를 기대하시나요?

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

관련 정보