循环测试所有 NFS 挂载点
loop to test all NFS mount point
此代码运行良好
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 :-(
在你的循环中它应该是:
read -r -t1 < <(stat -t "$i" 2>&-)
目前它只是读取第一个数组值,$i
没有被使用。
如果你真的想列出 all nfs mounts(标题这么说),那么使用:
mount | grep ' type nfs' | ...
这可能有误报,因为挂载点或挂载路径包含 type nfs
。
如果/proc/文件系统可用,这是更好的方法:
awk ' ~ /^nfs/ {print}' /proc/mounts | ...
我不确定如果挂载点或挂载路径包含 space 会发生什么——我从来没有遇到过这种情况。
此代码运行良好
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 :-(
在你的循环中它应该是:
read -r -t1 < <(stat -t "$i" 2>&-)
目前它只是读取第一个数组值,$i
没有被使用。
如果你真的想列出 all nfs mounts(标题这么说),那么使用:
mount | grep ' type nfs' | ...
这可能有误报,因为挂载点或挂载路径包含 type nfs
。
如果/proc/文件系统可用,这是更好的方法:
awk ' ~ /^nfs/ {print}' /proc/mounts | ...
我不确定如果挂载点或挂载路径包含 space 会发生什么——我从来没有遇到过这种情况。