if {[file exists $fileName] }
проверит, существует ли файл в локальной системе (той, в которой expect
он запущен), но условно созданный файл будет находиться на удаленном хосте (тот, в который входит скрипт ssh
), если он существует. Также filename
есть dummy
, но условно созданный файл есть dummy.txt
.
файл не работает в ожидаемом скрипте
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" }
Вместо этого `wc | читать ... `вы можете просто проверить код возврата grep (0 = совпадение найдено, см.` man grep`).
ott-- 9 лет назад
0
1 ответ на вопрос
1
Scott
Извините, Скотт, это была опечатка. Его 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
Похожие вопросы
-
9
В чем разница между командами "su -s" и "sudo -s"?
-
2
.profile в Mac OS X?
-
1
Приостановить все, кроме x задач, интенсивно использующих процессор
-
-
9
"Отсоединить" и "Reattach" Xterms через X сессий?
-
1
Windows дата репрезентация
-
9
grep все файлы .java в каталоге для конкретной строки
-
1
Является ли kill -STOP временной командой?
-
2
Изменить количество строк и столбцов в VT420?
-
10
Как я могу найти в истории bash и повторно запустить команду?
-
2
Можно ли передать выходные данные одной команды двум другим командам?