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
} 

関連情報