Est-il possible de notifier / avertir que le path actuel n'est plus un lien symbolique valide?

Disons que nous avons des ./a et ./b . Ensuite, nous créons un lien symbolique en utilisant ln -sax et en entrant cd x Le pwd serait x

Ensuite, dans un autre terminal, nous changeons le x sorte qu'il pointe vers b . Mais le premier returnnerait toujours x pour pwd ce qui n'est plus cohérent.

Donc existe-t-il un moyen pour le terminal actuel (bash) d'alerter / avertir si le path actuel est le lien symbolique obsolète?

Voici une approche qui utilise le fait que bash fait l'extension de command sur $PS1 pour tester pour voir si . et $PWD ont le même inode dans l'invite:

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

Je ne crois pas qu'il y ait un moyen d'accomplir cela avec un simple Bash. Vous pouvez configurer inotify manière à ce qu'il surveille un directory donné, puis avertir l'user, généralement par courrier électronique, mais il existe des moyens de réapather ces messages dans le shell / l'environnement d'un user.

Mais ces notifications seraient larges dans le sens où elles viendraient aux users quand les liens seraient changés / cassés, ils ne seraient pas contextuels, c'est-à-dire qu'ils ne seraient pas envoyés seulement lorsque l'user était présent dans ces directorys.

Exemple

Terminal 1:

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

Terminal 2:

 $ mkdir somedir 

Terminal 1:

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

Terminal 2:

 $ rmdir somedir 

Terminal 1:

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