файл не работает в ожидаемом скрипте

1111
user417721

Я пытаюсь проверить, существует ли определенная строка в имени файла на хосте. Таким образом, только если конкретный шаблон найден из команды grep, будет создан dummy.txt. Затем я хочу проверить, существует ли dummy.txt в качестве условия, и продолжить.

Но даже если dummy.txt создается, его не находит оператор if:

if {[file exists $fileName] } 

и управление передается блоку else. Что может быть причиной? Есть ли более простой способ добиться того, что я пытаюсь сделать?

 set Host [lindex $argv 0 ] spawn ssh -o StrictHostKeyChecking=no userid@$Host expect "*assword*" send "password\n" expect "+" send "cd path/that/contains/filename\n" expect "*$*" send "pwd\n" set fileName dummy.txt send } send "\n" expect "+" send } send "\n" expect "+" send "chmod 777 dummy.txt\n" if {[file exists $fileName] } {  send  send "\n" expect "+" send "ls -l\n" expect "+" send "rm dummy.txt\n" expect "+" send "ls -l\n" expect "+" send "exit\n" } else { send  send "\n" expect "+" send  send "\n" expect "+" send "cat filename\n" expect "+" send "exit\n"  } 
1
Вместо этого `wc | читать ... `вы можете просто проверить код возврата grep (0 = совпадение найдено, см.` man grep`). ott-- 9 лет назад 0

1 ответ на вопрос

1
Scott

if {[file exists $fileName] }проверит, существует ли файл в локальной системе (той, в которой expectон запущен), но условно созданный файл будет находиться на удаленном хосте (тот, в который входит скрипт ssh), если он существует. Также filenameесть dummy, но условно созданный файл есть dummy.txt.

Извините, Скотт, это была опечатка. Его dummy.txt везде. Если его проверка на удаленной машине, то как мне заставить его проверить на хосте? Я пытаюсь автоматизировать процесс добавления определенных строк в файл, но в то же время, если эти строки уже существуют, я не хочу дублировать записи, поэтому я использую grep и dummy.txt user417721 9 лет назад 0
Спасибо за исправление опечатки в вопросе. Но, пока вы редактируете вопрос, вы должны сделать его более понятным. Я не совсем понимаю ваш комментарий. Если вы хотите сделать что-то условно на удаленном хосте на основе условий на удаленном хосте, просто подумайте об этом как о сценарии оболочки и используйте логику оболочки; например, `send `. Scott 9 лет назад 0
Мне нужно добавить некоторый контент, скажем, xyz abc к имени файла на удаленном хосте. Но я хочу проверить, существуют ли эти xyz abc в имени файла. чтобы проверить это, я использую send } отправить "\ n" ожидать "+" отправить } send "\ n" Таким образом, если xyz abc существует в имени файла, создается новый файл dummy.txt. Таким образом, если dummy.txt существует на удаленном компьютере, это будет означать, что xyz и abc присутствуют в имени файла, и сценарию не нужно добавлять их снова user417721 9 лет назад 0
Я знаю, что это кажется немного длинным, но я не мог придумать более простой способ сделать это, так как я должен использовать взаимодействие. Если вы можете предложить решение для проверки файла на удаленном хосте или более простой способ заставить все это работать, это было бы здорово :) user417721 9 лет назад 0
`send {[-f dummy.txt] && echo" xyz abc ">> filename}`. Или прочитайте мой последний комментарий еще раз. Scott 9 лет назад 0
Привет Скотт, спасибо! Но я не понимаю, как и где это будет в моем сценарии. Не могли бы вы объяснить? user417721 9 лет назад 0
Что вы не понимаете? Вы уже делаете что-то на удаленном хосте условно, отправляя `[…] &&…`. Просто приспособьте это, чтобы делать то, что вы хотите - как я иллюстрировал в своем последнем комментарии. Scott 9 лет назад 0

Похожие вопросы