É possível notificar / avisar que o caminho atual não é mais um link simbólico válido?

4

Digamos que temos os diretórios ./a e ./b . Em seguida, criamos um link simbólico usando ln -s a x e inserindo cd x O pwd seria x

Então, em outro terminal, alteramos o x para que ele apontasse para b . Mas o primeiro ainda retornaria x para pwd , o que não é mais consistente.

Existe uma maneira de o terminal atual (bash) alertar / avisar se o caminho atual é o link simbólico obsoleto?

    
por zerkms 05.08.2013 / 01:28

2 respostas

2

Aqui está uma abordagem que usa o fato de que o bash comanda a expansão em $PS1 para testar se . e $PWD têm o mesmo inode no prompt:

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

Eu não acredito que haja alguma maneira de conseguir isso com apenas Bash regular. Você pode configurar inotify para que ele assista a um determinado diretório e, em seguida, notificar o usuário, normalmente por e-mail, mas provavelmente haverá maneiras de redirecionar essas mensagens para o shell / ambiente de um usuário.

Mas essas notificações seriam amplas no sentido de que elas só chegariam aos usuários quando os links fossem alterados / quebrados, eles não seriam contextuais, ou seja, eles não seriam enviados somente quando o usuário estivesse real naqueles ditos diretórios.

Exemplo

Terminal nº 1:

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

Terminal nº 2:

$ mkdir somedir

Terminal nº 1:

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

Terminal nº 2:

$ rmdir somedir

Terminal nº 1:

/home/saml/tst/ DELETE,ISDIR somedir
/home/saml/tst/somedir/ DELETE_SELF
    
por 05.08.2013 / 01:45

Tags