执行shell脚本时出现“没有这样的文件或目录”错误

时间:2014-06-10 06:55:18

标签: linux bash shell

我正在执行以下
                        #!/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.shscript_3.shrun_check_node.sh)从当前计算机复制到其他计算机({{ 1}})使用Test_ip。然后我给了他们执行权限。当我尝试scp时,它正在接受密码,然后显示spawn ssh root@$Test_ip \". /test_machine/script_2.sh\" 我不明白为什么这样说。它只是使所有这些都可执行,并在下一个命令,声称该文件不存在!

1 个答案:

答案 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