2013-12-10 3 views
4

그냥 "ls *"명령의 출력에 대해 혼동합니다. 우분투 11.10과 레드햇 엔터프라이즈 6.3의 시나리오 아래에서 동일한 결과를 얻었다."ls *"의 출력이 일치하지 않습니다

쉘 디렉토리 "ABC"가 생성 된 후 "LS *"의 출력이 비어있는 이유

$ uname -a 
    Linux 2.6.32-279.19.1.el6.x86_64 #1 SMP Sat Nov 24 14:35:28 EST 2012 x86_64 x86_64 x86_64 GNU/Linux 
$ echo $0 
    -bash 
$ cd test 
$ ls 
$ ls *    *<== at first, no file/directory under current work directory* 
ls: cannot access *: No such file or directory 
$ mkdir abc  *<== create a new directory "abc"* 
$ ls *    *<== output of "ls *" is empty but directory "abc" has been created.* 
$ mkdir abcd  *<== create the second directory "abcd"* 
$ ls *    *<== at this point, all the directories("abc" and "abcd") are displayed.* 
abc: 

abcd: 

사람이 설명 할 수 로그? 감사.

답변

6

abcd 디렉토리의 내용을 인쇄 중이므로 출력에 아무 것도 표시되지 않으므로 ls *이 비어 있습니다. ls *은 모든 파일을 인쇄하고 모든 디렉토리의 내용을 현재 디렉토리에 인쇄합니다.

대신이 ls 명령을 시도해보십시오

ls -d * 

출력 abcd을 보여줄 것이다. man ls 글로브 패턴이없는 ls 그 자체로, 쉘에 의해 확장되기 때문에 주로이다

-d  Directories are listed as plain files (not searched recursively). 
11

에서

.

따라서, 발행, 빈 abc 디렉토리를 만든 후 : 입력 한 것처럼 ls에서

$ ls * 

결과가 호출되는 :

abc의 내용을 나열
$ ls abc 

. abc이 비어 있으므로 아무 것도 인쇄되지 않습니다.

같은 방법으로

, 발행, abcd을 만든 후 : 입력 한 것처럼 ls에서

$ ls * 

결과 호출되는 :

$ ls abc abcd 

그리고 두 개의 디렉토리가 전달되기 때문에, ls 각을 인쇄합니다 (비어있는) 내용을 나열하기 전에 이들을 머리말로 사용하십시오.

6

이 질문에 대한 답변은 없지만 *: no such file 오류를 해결합니다.

와일드 카드가없는 파일로 확장하면 bash 쉘 옵션 nullglob이 설정되지

은 다음 와일드 카드는 일반 문자열로 쉘에 의해 문자 그대로있다.

$ ls 
$ ls * 
ls: cannot access *: No such file or directory 

에는 파일, 그래서 쉘 취급 일반 문자열로 *이 없습니다.nullglob 옵션과 쉘에

전원을 켜고은 아무것도 와일드 카드를 대체 할 :

$ shopt -s nullglob 
$ ls * 
$ 
+0

정확히 바로, 당신이 말한 것을 확인했습니다. 감사. – thinkhy

관련 문제