找不到生成命令



我在尝试运行.sh文件时出错

第 2 行:生成:找不到命令":没有这样的文件或目录bash.sh:第 3 行:期望:找不到命令bash.sh:第 4 行:发送:找不到命令
#!/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"

知道为什么会这样吗?

  1. 这是一个期望脚本,因此".exp"将是一个合适的文件扩展名:mv bash.sh sftp.exp
  2. 不要像bash bash.shsh bash.sh那样启动它.这样做:
    1. 使程序可执行:chmod a+x sftp.exp
    2. 使用
    3. ./sftp.exp/path/to/sftp.exp 启动它,或将其移动到$PATH中的目录并仅使用sftp.exp启动它
  3. send "myPassword"后,您必须"按回车键":send "myPasswordr"
  4. 在开发期望程序时,将exp_internal 1添加到顶部。

祝你好运,并带着进一步的问题回来。

它对我来说工作正常(来自 sftp 的错误:ssh: Could not resolve hostname XXX.XXX.XXX.XXX: Name or service not known ),尽管期望 (tcl) 脚本的.sh扩展有点令人反感;-)

通常,当发生这种无法解释/不可预测的行为时,这是因为脚本是在窗口(记事本.exe)下编辑的,该窗口使用rn来分隔行。 这会对 unix/linux 脚本造成严重破坏,因为只有 n 作为行分隔符。

您可以使用dos2unixunix2dos实用程序在两种格式之间进行转换。 作为实验,我将您的脚本转换为"dos"格式,果然出现类似的错误:

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:~$ 

似乎/usr/bin/expect 尚未安装在您的机器中。所以你会得到"找不到命令"

使用which expect进行检查,并将其安装到正确的路径。

我也遇到了同样的错误。 通过以下方式使用 expect 解决了这个问题:

DIRNAME=$(date +%F:%T)
expect_sh=$(expect -c "
spawn scp -r ABC xxx@yyy.yy.yy.yyy:/root/$DIRNAME
expect "password:"
send "xxxxr"
expect "#"
spawn ssh -o StrictHostKeychecking=no xxx@yyy.yy.yy.yyy
expect "password:"<
send "xxxxr"
expect "#"
send "rm -f /root/$DIRNAME/abc.txtr"
expect "#"
send "scp -r /root/$DIRNAME/* root@zzz.zz.zz.zzz:/root/ABC/r"
expect "password:"
send "xxxxxr"
expect "#"
send "exit r"
")<b
echo "$expect_sh"

这完全取决于您调用命令的方式。 就像 ray 说的,即使你在顶部指定了一个爆炸的环境,你仍然必须使用 expect -f 来运行它。

相关内容

  • 没有找到相关文章

最新更新