Во-первых, вам не нужно grep
выводls
:этого должно хватить
send "ls -1t $dbname.*\r"
И взять только самую новую:
send "ls -1t $dbname.* | head -1\r"
Теперь к сути вашего вопроса :да, может возникнуть проблема с извлечением вывода команды из ожидаемого _выходного буфера. Сделай это:
expect -re {(.*)\r\n$ $}
set cmd_output $expect_out(1,string)
cmd_output
будет содержать отправленную вами команду оболочки, а также вывод, все строки разделены \r\n
. Вы можете проверить его с помощью
exec od -c <<$expect_out(buffer)
Вам нужно удалить первую \r\n
разделительную строку. Вот один из способов сделать это:
if {![regexp {^.+?\r\n(.*)$} $cmd_output -> filename]} {
error "unexpected output: does not contain \\r\\n"
}
# now, go get $filename