![경로에 ./를 사용하는 것이 일반적인 Unix 도구에 적합합니까?](https://linux55.com/image/150599/%EA%B2%BD%EB%A1%9C%EC%97%90%20.%2F%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EA%B2%83%EC%9D%B4%20%EC%9D%BC%EB%B0%98%EC%A0%81%EC%9D%B8%20Unix%20%EB%8F%84%EA%B5%AC%EC%97%90%20%EC%A0%81%ED%95%A9%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
수년에 걸쳐 나는 ./
그 앞에서 절대 경로를 점점 더 많이 사용해 왔습니다. 예를 들어:
mv ./file /target/
rm ./something/else
# compared to
mv file /target/
rm something/else
나는 웹의 더 많은 곳에서 그것을 보았으며 아마도 이것이 내가 그것을 사용하는 데 적응한 이유일 것입니다. 나는 이것이 왜 이루어졌는지 이해할 수 없는 것 같고 한동안 궁금했습니다. 아마도 이는 로컬 바이너리를 직접 호출하는 데서 비롯된 나쁜 습관일 수 있습니다../a.out
./
위의 셸 예제 내용이 오래되었나요? ./
사용할 이유가 있나요?일부사례? 이것을 사용하면 경로가 더 명확해 집니까?
답변1
.
특히 콘텐츠가 스크립트나 프로그램인 경우 현재 디렉터리에 무언가가 있음을 명시 적 $PATH
으로 지정하는 것은 나쁜 습관이 아닙니다.보안 위험으로 간주됨).
어떤 경우에는 ./
필요 여부에 관계없이 경로 이름의 시작 부분에 추가합니다. 예를 들어, 아래로 find
검색할 때 찾은 경로 이름에는 .
항상 접두사가 붙습니다 ./
.
다른 경우에는 파일 이름이 유틸리티 옵션을 방해할 수 있습니다(예: 다음을 -f
사용하여 삭제하려고 할 때).
rm -f
사용
rm ./-f
다음과 같이 문제를 해결할 수 있습니다( ./-f
옵션으로 간주되지 않음 rm
).
rm -- -f
do( --
명령줄 옵션의 끝을 나타냄).
또한 쉘 전역 변수는 *
대시로 시작하는 파일로 확장될 수 있습니다. 따라서 루프는 ./*
루프보다 안전합니다 ( 유틸리티에 제공된 옵션에서 구분된 알 수 없는 파일 이름을 *
사용하지 않는 한 ).--
./
따라서 특히 경로명이 변수에 저장되어 있고 스크립트 외부 소스에서 오는 경우에는 경로명을 사용하는 것이 좋습니다 .