在我的 shell 脚本中,我试图删除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 个错误。
答案1
您错误地调用了脚本。
如果你说:
bash scriptname
然后 #! 行将被忽略,bash 将文件视为 bash 指令。但这不是 bash 脚本,而是 expect 脚本。
#! 行仅当脚本作为命令以自行运行的方式运行时才由内核进行解释。
要么授予脚本执行权限,以便您可以调用./scriptname
,要么使用expect
命令启动脚本。
答案2
确保之前有“expect”工具,如果没有,请执行此操作
# apt-get install expect
创建包含以下内容的脚本文件。(# 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
使用“expect”工具执行脚本文件
# expect /root/scriptfile