./a
및 디렉토리가 있다고 가정해 보겠습니다 ./b
. 그런 다음 다음을 사용 ln -s a x
하고 입력하여 심볼릭 링크를 만듭니다.cd x
pwd
x
그런 다음 다른 터미널에서 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