TCL 스크립트가 잡으려고 시도합니다.

TCL 스크립트가 잡으려고 시도합니다.

여러 변수를 설정하고 여러 파일을 읽는 TCL 스크립트가 있습니다. 읽은 마지막 파일에는 민감한 정보가 포함될 수 있으므로 스크립트 시작 부분에서 오류가 발생하더라도 파일이 삭제되었는지 확인해야 합니다.

#!/usr/bin/expect -f

set timeout 5

set foo [lindex $argv 0]
set bar [lindex $argv 1]
set secret [lindex $argv 2]

if { ! ([file exists "$foo"] && [file executable "$foo"]) } {
    puts stderr "$foo does not exist or is not executable"
    exit 2
}

if { ! ([file exists "$bar"] && [file executable "$bar"]) } {
    puts stderr "$bar does not exist or is not executable"
    exit 3
}

if { ! ([file exists "$secret"] && [file readable "$secret"]) } {
    puts stderr "$secret does not exist or is not readable"
    exit 4
}

#Read secret, do foo, do bar, etc.

file delete $secret

보고 있다노력하다나는 이것을 할 수 있다고 생각합니다 :

try {
    set foo [lindex $argv 0]
    set bar [lindex $argv 1]
    set secret [lindex $argv 2]

    if { ! ([file exists "$foo"] && [file executable "$foo"]) } {
        puts stderr "$foo does not exist or is not executable"
        exit 2
    }

    if { ! ([file exists "$bar"] && [file executable "$bar"]) } {
        puts stderr "$bar does not exist or is not executable"
        exit 3
    }

    if { ! ([file exists "$secret"] && [file readable "$secret"]) } {
        puts stderr "$secret does not exist or is not readable"
        exit 4
    }

    #Read the file, do foo, do bar, etc.

    file delete $secret
} on error {
    file delete $secret
    exit
}

하지만 저는 TCL 구문에 익숙하지 않아 문서에서 내용을 찾는 데 어려움을 겪고 있습니다. 이것이 가능합니까, 아니면 on error으로 변경해야 합니까 on error {result options}? 그렇다면 result합계 는 무엇입니까 options? 아니면 대신 사용해야 합니까 trap?

답변1

Tcl 문서에서 선택적 요소는 다음과 같습니다 ?this?.http://tcl.tk/man/tcl8.6/TclCmd/try.htm표시 처리기와 "finally" 절은 선택 사항입니다.

노력하다 ?매니저...? ?마침내 스크립트?

내부에존재하다자귀,변수 목록선택사항은 아니지만 빈 목록을 제공할 수 있습니다. 제공하는 경우 {result options},결과(인간에 대한) 오류 메시지이고옵션오류에 대한 특정 정보를 담고 있는 사전입니다(참조:반품자세한 내용은 매뉴얼 페이지 참조).

코드 중복을 줄이려면 finally블록을 사용하세요.

try {
    # your code here
} on error {} {
    exit
} finally {
    file delete $secret
} 

관련 정보