linux - bash脚本在sftp下载完文件时就不再执行后面的命令?

 Hb何逸秋yB 发布于 2022-11-02 16:36

我有一段bash脚本如下,将远程机器上的数据库下载到本地进行使用:

#!/bin/bash  
sftp user@11x.1xx.1x.2xx<

问题是文件下载完成,但是mv /home/user/db.bak/app.db /var/www/app/db/echo "done"并未执行,这是为什么呢?刚接触,goole了半天也没有结果,求大神指点。

1 个回答
  • SFTP保存到本地的路径: /home/user/db_bak/
    你给 mv 程序的本地文件路径: /home/user/db.bak/

    比较一下上面两个路径有有什么不同。给 mv 不正确的本地路径它当然不会给你移动。

    我没有在shell脚本中使用过sftp,不知道sftp执行完是不是也给了shell结束的信号导致下方的命令不再执行。

    个人一点建议:为什么不使用相对更安全和稳定的ssh(scp)呢?你没有服务器的权限?如果有权限还是建议使用scp吧。这样你就可以少写几行命令

    version 1:
    
    #/usr/bin/env bash
    scp user@ip:/file/path /home/user/local/path
    mv /old/path/file /new/path/file
    echo "Done!"
    
    version 2: 加上判断,更准确一些
    #/usr/bin/env bash
    scp user@ip:/file/path /home/user/local/path
    # 如果你从服务器复制到本地的是目录,就把下面中括号的 -f 改成 -d
    if [ -f "/local/path/file" ]; then
        mv /local/path/file /new/path/file
    else
        echo "文件不存在!"
    fi
    
    if [ -f "/new/path/file" ]; then
        echo "Done!"
    else
        echo "目标目录文件不存在"
    fi
    
    
    version 3: 被你带跑偏了,为什么不能直接scp到最终的目录呢。唉...
    #/usr/bin/env bash
    echo "第一步:开始复制远程文件到本地"
    scp user@ip:/var/www/app/db/app.db /home/user/db_bak/
    if [ -f "/home/user/db_bak/app.db" ]; then
        echo "文件成功从服务器复制到本地!"
    else
        echo "备份失败"
    fi
    
    
    
    2022-11-12 01:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有