此代码效果很好
mountpoint="/mnt/testnfs"
read -t1 < <(stat -t "$mountpoint" 2>&-)
if [ -z "$REPLY" ] ; then
echo "NFS mount stale. Removing..."
fi
如果我尝试将其放入循环中:
declare -a nfs_array=( "/mnt/testnfs1" "/mnt/testnfs2/" )
for i in "${nfs_array[@]}"
do
read -t1 < <(stat -t "$nfs_array" 2>&-)
if [ -z "$REPLY" ] ; then
echo "NFS dead"
fi
done
目标是测试所有安装点,此代码测试并仅读取nfs_array中的第一个条目。如果我将testnfs1换成testnfs2,则此代码将测试testnfs2挂载点,而忘记了testnfs1:-(
答案 0 :(得分:0)
在循环中应该是:
read -r -t1 < <(stat -t "$i" 2>&-)
当前,它只是读取第一个数组值,而未使用$i
。
答案 1 :(得分:0)
如果您确实要列出所有个nfs挂载(标题说明了这一点),请使用以下任一方式:
mount | grep ' type nfs' | ...
这可能具有误报,因为安装点或安装路径包含type nfs
。
如果/ proc /文件系统可用,这是一种更好的方法:
awk '$3 ~ /^nfs/ {print}' /proc/mounts | ...
在这里,我不确定如果安装点或安装的路径中包含空格-我从来没有遇到这种情况。