搜尋

首頁  >  問答  >  主體

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

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

#!/bin/bash  
sftp user@11x.1xx.1x.2xx<<EOF  
    get /var/www/app/db/app.db /home/user/db_bak/
    quit
EOF

mv /home/user/db_bak/app.db /var/www/app/db/
echo "done"

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

伊谢尔伦伊谢尔伦2780 天前719

全部回覆(1)我來回復

  • PHP中文网

    PHP中文网2017-04-17 13:49:55

    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
    
    
    

    回覆
    0
  • 取消回覆