깨진 심볼릭 링크를 확인하려면 "ln -s"를 만드세요.

깨진 심볼릭 링크를 확인하려면 "ln -s"를 만드세요.

나는 다음과 같은 함수를 작성하려고 합니다 ln()(호출하는 것이 좋은 생각이 아니라면 ln그냥 호출할 수도 있지만 myln()상관없습니다) .bash

  • 짧은 옵션이 -s없으면 그냥 command ln실행 됩니다.
  • 짧은 옵션이 -s존재하는 경우 command ln생성될 심볼릭 링크에 끊어진 링크가 포함되어 있지 않는 한 원래대로 작동합니다. 이 경우 stderr에 경고를 인쇄하고 링크를 생성하지 않습니다(또는 링크를 생성한 후 즉시 삭제합니다).

이 명령은 ln매우 일반적인 다양한 형태의 옵션을 제공하므로 모든 가능성을 포괄하는 함수를 작성하는 방법을 잘 모르겠습니다. 와 같은 간단한 사용법을 위해 작성하는 방법을 알고 있습니다 ln -s [absolute path 1] [absolute path 2].

ln최신 버전 GNU coreutils(질문 당시 최신 버전은 8.31) 에서 사용법을 다루는 기능이면 더 좋겠지만 , in의 사용법만 다루는 기능 POSIX도 괜찮을 것 같습니다.

사이드 노트rm: "포카요케 " 를 썼습니다 .https://codereview.stackexchange.com/a/215226/155325, 나는 "실패 방지"와 유사한 작업을 수행하고 싶습니다 ln. 나는 그것을 직접 사용하고 있으며 결과를 알고 있습니다. 나는 리눅스에 익숙하지 않은 사람들에게 "야, rm이제부터 이것을 사용해야 하고 이 경고는 잊어버리면 된다 rm /*" 고 말하는 사람들에게 그것을 건네주지 않을 것입니다.

답변1

이것이 원하는 것인지 확실하지 않지만 함수에서 namei명령을 사용하여 심볼릭 링크를 만들기 전에 대상 파일을 확인할 수 있습니다.

$ touch file1
$ ln -s file1 file2
$ ln -s file2 file3
$ namei file3 
f: file3
 l file3 -> file2
   l file2 -> file1
     - file1
$ echo $?
0
$ rm file1 # break first symlink
$ ls -l
$ namei file3
f: file3
 l file3 -> file2
   l file2 -> file1
       file1 - No such file or directory
$ echo $?
1

관련 정보