Unix에서 독립형 명령으로서 별표의 기능은 무엇입니까?


21

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

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


모든 쉘이 *알파벳순으로 확장 되지는 않지만 bash는 그렇게합니다.
aschepler

1
@aschepler : 모든 POSIX 호환 쉘이 있어야합니다. pubs.opengroup.org/onlinepubs/9699919799/utilities/… para 3 참조.
dave_thompson_085

답변:


20

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

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

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

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

10
"이 작업 만 수행합니다 ..."– 더 재미있을 수 있습니다. 쉘 함수, 내장 또는 PATH첫 번째 파일과 동일한 이름 의 실행 파일이 있으면이 다른 명령이 실행됩니다. mkdir foo; cd foo; touch rm xyz; ls; *; ls.
Kamil Maciorowski

@KamilMaciorowski - 공정한 포인트 : 지정된 "는이 단지 ... 할 것이다"내 문 필요 조건이 아니라 충분 것들. *별명 인 경우 명령도 다르게 작동합니다 .
AFH

1
결론 : 이러지 마! glob 확장 알파벳 순서를 신뢰할 수 있다고 생각하더라도이 순서는 로캘에 따라 다릅니다.
Aaron

이외에 . *또는 . ./*하나 개 CAN bash *(또는 다른 쉘).
Olivier Dulac

11

이것은 이것이 변수의 .일부 임을 암시 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

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


1
매개 변수에 rm()추가 -i하거나 매개 변수를 확인하고 특정 숫자 이상이 있는지 확인을 요청 하는 기능을 만드는 것은 문제가되지 않습니다 .
AFH

3
"가장 읽은 가장 끔찍한 메시지 중 하나입니다"+1
Mehrdad

+1 "보안상의 이유로 정말 좋지 않은 생각입니다. 당연히 Windows는이를 변경할 수없는 기본값으로 만들어야했습니다."
던컨 X 심슨


Windows에서 Windows를 수정할 수없는 기본값으로 설정 한 이유는 충분합니다. DOS가 디렉토리를 구현하기 전부터 역 호환성을 유지해야합니다. 당시에는 PC를 사용하는 사람이 하드 디스크를 가지고 있지 않았으며 플로피 디스크는 크기가 작기 때문에 디렉토리가 처음에는 필요하지 않다고 생각했습니다.
Muzer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.