我正在OSX中处理磁盘空间监视器脚本,并且很难首先生成卷列表。我需要这个列表随着时间的推移而动态生成;正确地工作也会使脚本变得可移植。
我正在使用以下脚本代码段:
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH
FS=$(df -l | grep -v Mounted| awk ' { print $6 } ')
while IFS= read -r line
do
echo $line
done < "$FS"
生成:
test.sh: line 9: /
/Volumes/One-TB
/Volumes/pfile-archive-offsite-three-CLONE
/Volumes/ERDF-Files-Offsite-Backup
/Volumes/ESXF-Files-Offsite-Backup
/Volumes/ACON-Files-Offsite-Backup
/Volumes/LRDF-Files-Offsite-Backup
/Volumes/EPLK-Files-Offsite-Backup: No such file or directory
我需要脚本生成如下输出:
/
/Volumes/One-TB
/Volumes/pfile-archive-offsite-three-CLONE
/Volumes/ERDF-Files-Offsite-Backup
/Volumes/ESXF-Files-Offsite-Backup
/Volumes/ACON-Files-Offsite-Backup
/Volumes/LRDF-Files-Offsite-Backup
/Volumes/EPLK-Files-Offsite-Backup
想法,建议?也欢迎使用替代或更好的方法生成已安装的卷列表。
谢谢!
丹
答案 0 :(得分:0)
<
用于从文件中读取。您不是从文件中读取,而是从bash变量读取。因此,请尝试在最后一行使用<<<
代替<
。
或者,您不需要将结果存储在变量中,然后从变量中读取;你可以直接读取管道的输出,就像这样(我已经创建了一个整洁的函数):
get_data() {
df -l | grep -v Mounted| awk ' { print $6 } '
}
get_data | while IFS= read -r line
do
echo $line
done
最后,循环没有做任何有用的事情,所以你可以摆脱它:
df -l | grep -v Mounted| awk ' { print $6 } '