여러 변수를 설정하고 여러 파일을 읽는 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
}