В настоящее время у меня есть некоторый код, который выполняет SFTP с помощью wait / tcl.Это примерно так:
send -i $ftpid "$cmd\r"
expect {
-i $ftpid -re "\n5\[0-9]\[0-9] \[^bB].*\nsftp> " {
set errorCode 149
set errorInfo "SFTP command error on $cmd."
return 1
}
-i $ftpid "452 Err.*\nsftp> " {
set errorCode 149
set errorInfo "SFTP 452 command error on $cmd."
return 1
}
-i $ftpid "Invalid command*\nsftp> " {
set errorCode 149
set errorInfo "SFTP invalid command on $cmd."
return 1
}
-i $ftpid -re "\n2\[0-9]\[0-9] .*\nsftp> " {
return 0
}
}
Иногда я сталкиваюсь с ситуациями, когда на FTP-сервере есть коды возврата или сообщения, которые не соответствуют тому, что уже заполнено в базе кода.Вместо того, чтобы изменять основной код для этих целей, я хотел бы иметь внешний файл (например, returncodes.tbl), в котором я могу получить список сообщений, таких как:
552 Invalid Return*\nsftp>;<errorCode>;<errorInfo>
400 Some Error*\nsftp>;<errorCode>;<errorInfo>
...
Так что он будет интерпретироватьсяэто в ожидаемом коде вроде:
-i $ftpid "552 Invalid Return*\nsftp>" {
set errorCode <errorCode>
set errorInfo "<errorInfo>"
return 1
}
-i $ftpid "400 Some Error*\nsftp>" {
set errorCode <errorCode>
set errorInfo "<errorInfo>"
return 1
}
Я знаю, как читать внешний файл и разбивать переменные вверх (открывать / читать / разбивать).Однако я не могу понять, как создать цикл, необходимый внутри оператора ожидаемого.Надеялся, что у кого-то есть идея, как этого добиться.