開いているすべてのシェルでコマンドを実行する

開いているすべてのシェルでコマンドを実行する

私はsshfsを使って開発ボックスでいくつかの便利な作業をします。いいですね。しかし、私は通常、fusermount -uカバーを閉じる前に(休止状態を実行する)、これを行うのを忘れています。その後、戻ってきたときにsshfsが停止して掃除をしなければなりませんでした。

私はすべてのsshfsマウントポイントとDWIMを繰り返す/etc/pm/sleep.dにスクリプトを持ちたいと思います。 checksを使って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の一部のオプションはこの起動ファイルのソースをオーバーライドします。
  • すべてのシェルプロセスは、指定されたsshfsディレクトリに依存する操作を実行できます。このディレクトリをランダムに変更すると、特定のスクリプトがその時点(またはそれ以降)で実行する操作によっては、未定義の動作が発生する可能性があります。
  • 指定されたディレクトリに bash プロセスで開始された他のプロセスがまだ存在する可能性があります。これらのプロセスを殺す以外にできることはあまりありません。

おすすめ記事