zsh:检查 $PWD 是否在 tmpfs 挂载的文件系统上

400*_*Cat 2 zsh mount proc tmpfs

zsh如果$PWD当前在已tmpfs安装的文件系统上,我想更改我的提示颜色。

比如说,/dev/shm是一个tmpfs文件系统。我可以确认:

$ grep /dev/shm /proc/mounts 
tmpfs /dev/shm tmpfs rw,nosuid,nodev,noexec,relatime,size=26307700k 0 0
Run Code Online (Sandbox Code Playgroud)

所以,当我在的时候/dev/shm,我可以这样做:

grep -q "^tmpfs $PWD tmpfs " /proc/mounts
Run Code Online (Sandbox Code Playgroud)

但是,如果我站在/dev/shm/foo、 或 等中/dev/shm/foo/bar,那将行不通。

如何检查是否$PWD在tmpfs文件系统上?

Sté*_*las 10

在 Linux 上,您应该能够执行以下操作:

findmnt -no FSTYPE .
Run Code Online (Sandbox Code Playgroud)

返回文件系统的类型 .

stat(非 zshstat内置)的 GNU 实现也可以通过以下方式实现:

command stat -fc %T .
Run Code Online (Sandbox Code Playgroud)

因此,您可以将该信息缓存$psvar在chpwd钩子中的元素中:

check_cwd_is_tmpfs() {
  if [[ $(command stat -fc %T .) = tmpfs ]]; then
    psvar[1]=red
  else
    psvar[1]=green
  fi
}
chpwd_functions+=(check_cwd_is_tmpfs)
check_cwd_is_tmpfs

PS1='%F{%1v}%~%F$ '
Run Code Online (Sandbox Code Playgroud)