Unix에서 독립형 명령으로서 별표의 기능은 무엇입니까? 알파벳 프로그램을 실행했다는 것입니다.

Red Hat Linux의 터미널에서 엉망이었고 별표 ( *)를 입력 한 다음 return을 입력하면 디렉토리의 프로그램 중 하나가 실행되었습니다. 왜?

가장 좋은 추측은 Unix가 그것을 와일드 카드로 취급하여 첫 번째 알파벳 프로그램을 실행했다는 것입니다. 이후 my_program.exeone_of_my_programs.program단순히 파일의 이름을 입력하여 실행할 수 있습니다, 와일드 카드 연산자는 가능한 모든 파일을 나타냅니다. 프로그램은 알파벳순으로 시작되므로 Unix가 실행합니다. 이것이 올바른 판단입니까?



답변

당신의 해석은 정확합니다. 나머지 파일은 해당 매개 변수 목록으로 표시됩니다.

프로그램에 실행 가능 비트가 설정되어 있고 현재 디렉토리가 PATH목록 에있는 경우에만이 작업을 수행 합니다.

이해를 도울 수있는 몇 가지 참고 사항 :-

  • 입력 ./*하면 해당 PATH항목이 필요하지 않습니다.
  • . *또는 을 입력 . ./*하고 첫 번째로 일치하는 파일이 스크립트 인 경우, 실행 파일 일 필요도없고 현재 디렉토리가 있어야 할 필요도 없습니다 PATH(이외의 쉘의 경우에는 사실이 아닐 수도 있음 bash).

답변

이것은 이것이 변수의 .일부 임을 암시 PATH합니다. 그것은 보안상의 이유로 정말 나쁜 생각입니다 (당연히 Windows는 그것을 수정할 수없는 기본값으로 만들어야했습니다).

그러나이 “제안”은 약간만 유효합니다. rm현재 디렉토리에 이름이 지정된 파일 *이 있으면 기본값을 실행하는 것이 좋습니다 rm.

/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm  what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$ 

보시다시피 rm, 현재 디렉토리 (빈 파일과 실행 불가능한 파일)가 아니라 시스템의 default /bin/rm입니다.

와일드 카드가 관련된 경우 항상 명령을 다시 확인하십시오. 다음은 가장 무서운 메시지 중 하나입니다.

rm: cannot remove '.o': No such file or directory

이것은 전화의 결과입니다

rm * .o

, 가짜 공간의 최악의 배치를 생각해 낼 수 있습니다.