내가 이해하는 한도에서는:
./filename
filename
스크립트로 실행됩니다../
현재 디렉터리를 나타냅니다.
./가 a 앞에 오면 그 효과는 무엇입니까(있는 경우)글로벌 예선(필터):
qpdf --empty --pages ./*.pdf(nOn) -- output.pdf
이 질문은 없이 실행해도 ./
동일한 결과가 나오는 것 같아서 묻는 것입니다.
답변1
접두사 ./
(또는 경로)는 대시로 시작하는 파일 이름이 옵션으로 간주되지 않도록 합니다.
$ touch ./-l foo bar
$ ls
bar foo -l
$ ls *
-rw-r--r-- 1 ilkkachu ilkkachu 0 Nov 3 15:10 bar
-rw-r--r-- 1 ilkkachu ilkkachu 0 Nov 3 15:10 foo
근본적인 문제는 그것이다.껍데기와일드카드를 확장하고, 예를 들어 ls
매개변수를 볼 때 -l
그것이 파일 이름 와일드카드에서 나온 것인지, 아니면 사용자가 직접 작성한 것인지 알 수 있는 방법이 없습니다.
위에서 호출된 파일은 긴 목록으로 전환 -l
됩니다 . ls
이러한 파일 이름을 사용하면 invalid option
오류가 발생할 수 있습니다. 또는 명령이 이고 rm
파일 이름이 -rf
.
이것은 파일 이름에 대한 유닉스 시스템의 느슨한 태도를 틀림없이 "잘못"으로 만드는 요인 중 하나일 뿐입니다. 더 자세히 알아보려면 David Wheeler가 작성한 다음 기사를 확인하세요.
답변2
도트-슬래시 구조는 " filename
스크립트로 실행"되지 않습니다. 이는 "현재 디렉터리에서 찾기"라는 쉘(또는 입력을 해석하는 다른 프로그램)에 대한 명령입니다. 명령이 현재 작업 디렉터리에 있고 현재 작업 디렉터리가 검색 경로에 없는 경우 일반적으로 명령(바이너리 또는 스크립트) 앞에 추가됩니다. qpdf
예에서와 같이 명령에서 이것을 사용하는 것은 명령을 호출한 디렉터리에 출력 파일을 배치하려는 경우 다른 디렉터리에서 소스 파일을 가져오는 방법입니다.