Назад | Перейти на главную страницу

bash скрипт - порождение, отправка, взаимодействие - ошибка команд не найдена

В моем сценарии оболочки я пытаюсь удалить запрос пароля для scp команда (как указано в https://stackoverflow.com/questions/459182/using-expect-to-pass-a-password-to-ssh/459225#459225) и вот что у меня есть: -

#!/usr/bin/expect
spawn scp $DESTINATION_PATH/exam.tar $SSH_CREDENTIALS':/'$PROJECT_INSTALLATION_PATH
expect "password:"
send $sshPassword"\n";
interact

При запуске скрипта возникают ошибки

spawn: command not found
send: command not found
interact: command not found

Я тоже получал ошибку expect: command not found Кроме того, тогда я понял путь к expect не было правильным и expect вообще не устанавливался. Так я и сделал yum install expect, исправили путь и ошибка исчезла. Но все еще не удалось удалить остальные 3 ошибки.

Вы неправильно вызываете сценарий.

Если вы скажете:

bash scriptname

затем #! строка игнорируется, и bash принимает файл, как если бы это были инструкции bash. Но это не сценарий bash, это сценарий ожидания.

#! Строка интерпретируется ядром только тогда, когда ей дан скрипт как отдельная команда.

Либо дайте скрипту разрешение на выполнение, чтобы вы могли просто вызвать ./scriptname, или используйте expect команда для запуска скрипта.

  1. убедитесь, что у вас есть инструмент "ожидать", если нет, сделайте это

    # apt-get install expect

  2. создайте файл сценария со следующим содержимым. (# vi / root / scriptfile)

    spawn scp /path_from/file_name user_name_here@to_host_name:/path_to

    expect "password:"

    send put_password_here\n;

    interact

  3. выполнить файл сценария с помощью инструмента "ожидать"

    # expect /root/scriptfile