检查目录是否装有bash
我在用
mount -o bind /some/directory/here /foo/bar 
 我想用bash脚本检查/foo/bar ,看看它是否被挂载? 如果没有,那么调用上面的安装命令,否则做别的。 我怎样才能做到这一点? 
CentOS是操作系统。
 不带参数运行mount命令会告诉你当前的挂载。 从shell脚本中,你可以用grep和一个if语句来检查挂载点: 
 if mount | grep /mnt/md0 > /dev/null; then echo "yay" else echo "nay" fi 
 在我的例子中,if语句是检查grep的退出代码,它表示是否匹配。 由于我不希望在匹配时显示输出,所以我将它redirect到/dev/null 。 
你没有提到一个操作系统。
  Ubuntu Linux 11.10(可能是最新版本的Linux)有mountpoint命令。 
以下是我的一台服务器的示例:
 $ mountpoint /oracle /oracle is a mountpoint $ mountpoint /bin /bin is not a mountpoint 
 其实,在你的情况下,你应该可以使用-q选项,如下所示: 
 mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar 
希望有所帮助。
另一个干净的解决scheme是这样的
 $ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted 
当然,“echo something”可以replace为每种情况下你需要做的任何事情。
  mountpoint手册说: 
检查给定的目录或文件是否在/ proc / self / mountinfo文件中提到。
山的手册说:
列表模式仅保持向后兼容。 为了更强大和可定制的输出使用findmnt(8),特别是在你的脚本。
 所以正确的命令是findmnt ,它本身就是util-linux包的一部分,根据手册: 
可以在/ etc / fstab,/ etc / mtab或/ proc / self / mountinfo中search
 所以它实际上search比mountpoint更多的东西。 它也提供了方便的select: 
-M, – 点path
明确定义安装点文件或目录。 另见–target。
总之,要检查一个目录是否用bash挂载,你可以使用:
 if [[ $(findmnt -M "$FOLDER") ]]; then echo "Mounted" else echo "Not mounted" fi 
例:
 mkdir -p /tmp/foo/{a,b} cd /tmp/foo sudo mount -o bind ab touch a/file ls b/ # should show file rm -fb/file ls a/ # should show nothing [[ $(findmnt -M b) ]] && echo "Mounted" sudo umount b [[ $(findmnt -M b) ]] || echo "Unmounted" 
我的解决scheme
 is_mount() { path=$(readlink -f $1) grep -q "$path" /proc/mounts } 
例:
 is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/ 
 对于Mark J. Bobak的回答 ,如果在不同的文件系统中使用bind选项进行装载, mountpoint 点将不起作用。 
 对于Christy Neylan的回答 ,不需要将grep的输出redirect到/ dev / null,而只需要使用grep -q 。 
  最重要的是,使用readlink -f $mypath来规范path : 
-  如果使用反斜杠检查
/path/to/dir/end等path,/proc/mounts或mount输出中的/path/to/dir为/path/to/dir -  在大多数Linux发行版中, 
/var/run/是/var/run/的符号链接,因此如果为/var/run/mypath装入绑定并检查它是否挂载,它将显示为/proc/mounts/run/mypath。 
在我的.bashrc中,我做了以下别名:
 alias disk-list="sudo fdisk -l"