![깨진 심볼릭 링크를 확인하려면 "ln -s"를 만드세요.](https://linux55.com/image/152626/%EA%B9%A8%EC%A7%84%20%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%EB%A5%BC%20%ED%99%95%EC%9D%B8%ED%95%98%EB%A0%A4%EB%A9%B4%20%22ln%20-s%22%EB%A5%BC%20%EB%A7%8C%EB%93%9C%EC%84%B8%EC%9A%94..png)
나는 다음과 같은 함수를 작성하려고 합니다 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