/ / Expect script: отримати останню дату змінення в змінній - tcl, sftp, expect

Чекати сценарію: отримати останню дату зміни в змінній - tcl, sftp, expect

Я підключаюся до віддаленої системи через sftp, використовуючи очікування. Я хочу отримати останню дату змінення файлу my.csv в змінну в очікуваному скрипті

Нижче мій код:

 spawn sftp -o Port=$port $user@$host
expect "Password:"
send "$passwordr";
expect "sftp> "
set file_time [exec ls -la my.csv| awk {{ print $6$7$8}}]
send "echo $file_timer";
expect "sftp> "
send "quitr";
expect eof

Відповіді:

2 для відповіді № 1

Добре, я подивився на це важче. Я бачу кілька помилок:

  1. Коли ви виконуєте ls -la, ви робите це на своємулокальний комп'ютер ... не на віддаленому сервері SFTP. Якщо ви хочете виконати це на sftp-сервері, вам потрібно використовувати "відправити", щоб його було надіслано за породженим сеансом.
  2. Якщо ви мали використовувати "send", то ви не зможете запустити його через awk, оскільки ls буде командою sftp server, і не існує awk на інтерфейсі сервера sftp.
  3. Нарешті, я не думаю, що надсилання відлуння ехо на сформований sftp-сеанс - це те, що ви хочете. Я гадаю, що ви хочете, щоб він відображався на локальній машині. Отже команда TCL "виставляє" те, що ви хочете там.

Отже, що вам потрібно зробити, це відправити команду ls до sftp-сервера, а потім скористатися очікуванням з регулярним виразом, щоб вирвати мітку часу з повернутого виводу.

Там, ймовірно, більш елегантні способи шкіри цекішка, але припускаючи, що протягом кількох місяців англійська мова і що ваше ім'я файлу завжди ідентичне (my.csv), тут є робочий варіант (на TCL 8.4.13) цього сценарію:

spawn sftp user@host
expect "assword:"
send "mypasswordr";
expect "sftp>"
send "ls -la my.csvr"
expect -re "[-rwx]{10}.*((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec).*)my.csv"
set timestamp $expect_out(1,string)
expect "sftp>"
send "quitr";
expect eof
puts "Timestamp is: $timestamp"

Я залишу контроль над помилками, обробку тайм-аутів і все те, що добре для вас. :-)

Дайте мені знати, якщо це працює у вашому середовищі.