我使用 sshfs 在我的开发盒上做一些有用的事情。我喜欢它。但是,我通常会fusermount -u
在合上盖子(触发休眠)之前忘记这样做。然后,当我回来时,sshfs 被冻结了,我必须清理。
我更愿意在 /etc/pm/sleep.d 中有一个脚本来迭代我的所有 sshfs 挂载点和 DWIM。我已经用支票fusermount -u
编写了代码df -l
。但是,在测试中,我确定我还需要从所有安装点中退出才能fusermount -u
工作。
但是,我不知道如何迭代我打开的 bash 终端并在其中做有用的事情。帮助?
答案1
您可以通过在以下位置注册自定义用户信号处理程序来实现此目的~/.bashrc
:
trap '[ "$PWD" = "/my/sshfs/mount" ] && cd ~' SIGUSR1
SIGUSR1
然后,每当您向 bash 进程发送信号时,都会调用此处理程序:
killall -u "$USER" -USR1 bash
这有一些警告:
- 信号处理程序必须为所有(交互式和非交互式)bash 实例注册,否则将执行默认操作(退出)。我认为使用
~/.bashrc
通常会做到这一点。但是,bash 的一些选项将覆盖此启动文件的来源。 - 任何 shell 进程都可能正在执行依赖于给定 sshfs 目录的操作。随机更改此目录可能会导致任意未定义的行为,具体取决于给定脚本当时(或稍后)正在执行的操作。
- 很可能还有从 bash 进程启动的其他进程仍在给定目录中。对于这些进程,除了杀死它们之外,没有太多可以做的事情。