현재 경로가 더 이상 유효한 심볼릭 링크가 아님을 알리거나 경고할 수 있습니까?

현재 경로가 더 이상 유효한 심볼릭 링크가 아님을 알리거나 경고할 수 있습니까?

./a및 디렉토리가 있다고 가정해 보겠습니다 ./b. 그런 다음 다음을 사용 ln -s a x하고 입력하여 심볼릭 링크를 만듭니다.cd xpwdx

그런 다음 다른 터미널에서 x를 가리키도록 변경합니다 b. 그러나 첫 번째 항목은 더 이상 일관성이 없기 x때문에 여전히 반환됩니다 .pwd

그렇다면 현재 경로가 더 이상 사용되지 않는 심볼릭 링크인 경우 현재 터미널(bash)에서 경고/경고를 발행하는 방법이 있습니까?

답변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

일반 Bash만으로는 이것이 가능하지 않다고 생각합니다. 특정 디렉터리를 모니터링한 다음 일반적으로 이메일을 통해 사용자에게 알리도록 설정할 수 있지만 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

관련 정보