装载量和OSX中的bash

时间:2013-10-27 16:56:58

标签: macos bash shell

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

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

谢谢!

1 个答案:

答案 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 } '