如何将lftp执行du命令的结果存储到shell脚本变量中
lftp脚本获取FTP服务器du执行结果并存入变量的解决方案
错误原因
你原来的写法存在两个核心问题:
- 写在
<< EOF块内的$(du)会被本地Shell提前执行,拿到的是你本机的du结果,不是FTP服务器上的执行结果 - 你将Shell变量赋值语句写在了lftp的交互输入块中,lftp本身不识别
FOO="xxx"这类Shell语法,因此触发Unknown command报错
正确写法
将整个lftp命令的执行输出捕获到Shell变量中,再对结果做过滤提取即可,参考脚本如下:
#!/bin/bash FTP_PASS=password FTP_HOST=IP FTP_USER=username # 捕获lftp执行du的全量输出 FTP_DU_RESULT=$(lftp << EOF open ${FTP_USER}:${FTP_PASS}@${FTP_HOST} du quit EOF ) # 提取根目录总已用空间数值,即du结果中第二列为`.`的行的第一个字段 USED_SPACE=$(echo "$FTP_DU_RESULT" | awk '$2 == "." {print $1}') echo $USED_SPACE
逻辑说明
- 用
$()包裹整个lftp命令,会把lftp执行过程中所有标准输出内容存入变量,不会把赋值语句传递给lftp解析 - 用awk过滤结果时,匹配路径为
.的行(即FTP根目录的总大小统计行),直接取出第一列的数值就是你需要的结果
内容的提问来源于stack exchange,提问作者BoomRamada
相关产品推荐
相关产品推荐

