0

我正在处理 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

想法、建议?也欢迎生成已安装卷列表的替代或更好的方法。

谢谢!

4

1 回答 1

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 } '
于 2013-10-27T17:00:14.053 回答