Linux下shell脚本执行故障的排查:使用./执行方式执行成功,使用sh 执行脚本失败、expect交互脚本【测试成功解决】

艺帆风顺 发布于 2025-04-03 31 次阅读


一、故障现象

    采用./sh脚本方式可以正常执行脚本;

    但是采用sh 脚本方式无法执行,执行出错。

    [root@host-192-168-66-18 backup]# sh 3.sh 3.sh:行7: log_file:未找到命令3.sh:行13: spawn:未找到命令couldn't read file "Password:": no such file or directory3.sh:行16: send:未找到命令couldn't read file "eof": no such file or directory

    二、问题排查

    错误提示显示Expect脚本中的命令未找到,可能是因为Expect工具未正确安装或脚本中的路径问题。请按照以下步骤来解决问题:

    1. 确保Expect已安装: 首先确保Expect工具已在你的系统上安装。可以尝试在终端中运行expect命令来查看是否可以启动Expect shell。

    2. 确认Expect脚本路径: 确保在脚本的第一行中正确指定了Expect的路径。通常,Expect工具的二进制文件位于/usr/bin/expect。确保脚本的第一行是#!/usr/bin/expect

    3. whereis expect

      [root@host-192-168-66-18 backup]# whereis expectexpect: /usr/bin/expect

      三、问题解决

          问题在于脚本使用了#!/usr/bin/expect来指定解释器,适用于直接执行脚本文件。

          如果使用sh 3.sh来运行脚本时,解释器将是/bin/sh而不是Expect

        [root@host-192-168-66-18 backup]# crontab -l* * * * * /bin/expect /data/backup/backupall.sh

        /bin/expect /data/backup/backupall.sh