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.
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