Search code examples
bashshellcommandexpectspawn

Spawn command not found


I have an error trying to run a .sh file

line 2: spawn: command not found
": no such file or directory
bash.sh: line 3: expect: command not found
bash.sh: line 4: send: command not found
#!/usr/bin/expect -f
spawn sftp -o IdentityFile=MyFile.ppk 500200243@XXX.XXX.XXX.XXX
expect "XXX.XXX.XXX.XXX.gatewayEnter passphrase for key 'MyFile.ppk.ppk':"
send "myPassword"

Any idea why it happens?


Solution

  • It works OK for me (error from sftp: ssh: Could not resolve hostname XXX.XXX.XXX.XXX: Name or service not known), though the .sh extension for an () script is a little off-putting ;-)

    Often when this sort of unexplainable/unpredictable behavior happens, it is because the script was edited under (notepad.exe), which uses \r\n to delimit lines. This plays havoc with / scripts, as only \n is expected as a line delimiter.

    You can use the dos2unix and unix2dos utilities to convert between the two formats. As an experiment, I converted your script to "dos" format, and sure enough got a similar error:

    ubuntu@ubuntu:~$ unix2dos bash.sh 
    unix2dos: converting file bash.sh to DOS format ...
    ubuntu@ubuntu:~$ ./bash.sh 
    ": no such file or directory
    ubuntu@ubuntu:~$ dos2unix bash.sh 
    dos2unix: converting file bash.sh to Unix format ...
    ubuntu@ubuntu:~$ ./bash.sh 
    spawn sftp -o IdentityFile=MyFile.ppk 500200243@XXX.XXX.XXX.XXX
    ssh: Could not resolve hostname XXX.XXX.XXX.XXX: Name or service not known
    Couldn't read packet: Connection reset by peer
    send: spawn id exp6 not open
        while executing
    "send "myPassword""
        (file "./bash.sh" line 4)
    ubuntu@ubuntu:~$