我正在执行以下
#!/bin/bash
###############################################################################
# This script can copy any file from Present machine to machine with IP as Test_ip and execute it :) #
###############################################################################
############################ Main code starts here ####################################
Test_ip="10.20.12.206"
home=`pwd`
expect -c "
spawn ssh root@$Test_ip \"mkdir /test_machine\"
expect yes/no { send yes\r; exp_continue }
expect password { send gaur\r; exp_continue }
exit
"
expect -c "
spawn scp $home/run_check_node.sh $home/script_3.sh $home/script_2.sh root@$Test_ip:/test_machine/
expect yes/no { send yes\r; exp_continue }
expect password { send gaur\r; exp_continue }
exit
"
expect -c "
spawn ssh root@$Test_ip \"chmod +x /test_machine/run_check_node.sh /test_machine/script_2.sh /test_machine/script_3.sh;\"
expect yes/no { send yes\r; exp_continue }
expect password { send gaur\r; exp_continue }
exit
"
expect -c "
spawn ssh root@$Test_ip \". /test_machine/script_2.sh\"
expect yes/no { send yes\r; exp_continue }
expect password { send gaur\r; exp_continue }
exit
"
显示的脚本为script_1.sh
。
在上面的代码中,我在Test_ip
上创建一个目录,然后将所有3个文件(script_2.sh
,script_3.sh
和run_check_node.sh
)从当前计算机复制到其他计算机({{ 1}})使用Test_ip
。然后我给了他们执行权限。当我尝试scp
时,它正在接受密码,然后显示spawn ssh root@$Test_ip \". /test_machine/script_2.sh\"
我不明白为什么这样说。它只是使所有这些都可执行,并在下一个命令,声称该文件不存在!
答案 0 :(得分:0)
而不是使用
expect -c "
spawn ssh root@$Test_ip \". /test_machine/script_2.sh\"
expect yes/no { send yes\r; exp_continue }
expect password { send gaur\r; exp_continue }
exit
"
使用
expect -c "
spawn ssh root@$Test_ip \"***bash*** /test_machine/script_2.sh\"
expect yes/no { send yes\r; exp_continue }
expect password { send gaur\r; exp_continue }
exit
"
注意:.
被上面的bash
取代。
我感觉发生的是,尽管脚本script_2.sh
是可执行的,但是当尝试从本地机器执行到远程机器时,由于使用#!/bin/bash
,它可能不允许它作为shell运行脚本(使用。/ file_path)。
见the difference between using bash and sh clearly here