現在のパスが有効でないシンボリックリンクではないことを通知または警告できますか?

現在のパスが有効でないシンボリックリンクではないことを通知または警告できますか?

./aそしてディレクトリがあるとしましょう./b。次に、次を使用しln -s a xて入力してシンボリックリンクを作成します。cd xpwdx

次に、他の端末でをx指すように変更しますb。ただし、最初の項目はもはや一貫性がなくなったxため、まだ返されます。pwd

もしそうなら、現在のルートが廃止されたシンボリックリンクである場合、現在の端末で警告/警告を発行する方法はありますか?

答え1

$PS1以下は、bashコマンド拡張を利用して同じinodeがプロンプトにあるかどうかをテストする方法です.$PWD

PS1='$([[ $(stat -Lc%i $PWD 2>/dev/null) == $(stat -c%i .) ]] || echo "\[\e[1;31m\]PWD invalid or changed \[\e[m\]")'"$PS1"

答え2

普通のバッシュだけではこれはできないと思います。特定のディレクトリを監視し、通常は電子メールでユーザーに通知するように設定できますが、inotifyこれらのメッセージをユーザーのシェル/環境に再パイプすることもできます。

ただし、これらの通知はリンクが変更または切断された場合にのみユーザーに送信されるため、範囲が広くなります。状況に敏感ではありません。つまり、ユーザーが実際にこれらのディレクトリにある場合にのみ送信されます。

はい

ターミナル1:

$ mkdir $HOME/tst
$ inotifywait -mr $HOME/tst
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.

NO2。ターミナル:

$ mkdir somedir

ターミナル1:

/home/saml/tst/ CREATE,ISDIR somedir
/home/saml/tst/ OPEN,ISDIR somedir
/home/saml/tst/ CLOSE_NOWRITE,CLOSE,ISDIR somedir

NO2。ターミナル:

$ rmdir somedir

ターミナル1:

/home/saml/tst/ DELETE,ISDIR somedir
/home/saml/tst/somedir/ DELETE_SELF

関連情報