![ls의 출력에는 개행 문자가 있지만 한 줄에 나타납니다. 왜?](https://linux55.com/image/936/ls%EC%9D%98%20%EC%B6%9C%EB%A0%A5%EC%97%90%EB%8A%94%20%EA%B0%9C%ED%96%89%20%EB%AC%B8%EC%9E%90%EA%B0%80%20%EC%9E%88%EC%A7%80%EB%A7%8C%20%ED%95%9C%20%EC%A4%84%EC%97%90%20%EB%82%98%ED%83%80%EB%82%A9%EB%8B%88%EB%8B%A4.%20%EC%99%9C%3F.png)
나는 쉘에 관한 상대적으로 기본적인 점을 간과했을 수도 있다고 생각합니다. 출력엘에스기본적으로 명령은 출력을 줄바꿈으로 구분하지만 쉘은 출력을 한 줄에 표시합니다.
누구든지 나에게 이것을 설명해 줄 수 있습니까? 나는 항상 출력이 공백으로 구분된 것이라고 생각했지만 이제 출력이 개행으로 구분되어 있으므로 출력이 별도의 줄에 표시되기를 원합니다.
예:
cpoweradm@debian:~/lpi103-4$ ls text*
text1 text2 text3
OD줄 바꿈으로 구분된 출력을 표시합니다.
cpoweradm@debian:~/lpi103-4$ ls text* | od -c
0000000 t e x t 1 \n t e x t 2 \n t e x t
0000020 3 \n
0000022
개행 문자가 있는 경우 출력이 다음과 같이 표시되지 않는 이유는 무엇입니까?
text1
text2
text3
답변1
출력을 파이프할 때 ls
동작이 다릅니다 .
이 사실이 숨겨져 있습니다정보 문서:
표준 출력이 터미널인 경우 출력은 열로 정렬되고(세로로 정렬됨) 제어 문자는 물음표로 출력됩니다. 그렇지 않으면 출력이 한 줄에 하나씩 나열되고 제어 문자가 그대로 출력됩니다.
이를 시연하려면 다음을 실행해 보세요.
ls
그런 다음
ls | less
이는 파이프 또는 리디렉션 여부에 관계없이 한 줄에 하나의 파일 출력을 보장하려면 다음을 실행해야 함을 의미합니다.
ls -1
( -1
1위입니다)
또는 다음을 ls | less
실행하여 열별로 강제로 출력 할 수 있습니다.
ls -C
( -C
대문자 C입니다)
답변2
귀하의 연구 결과는 구문 분석된 출력이 항상 나쁜 생각인 주된 이유를 강조합니다 ls
. Greg의 위키 보기전체 설명.
문제를 거꾸로 생각해 보세요. ls는 때때로 출력 사이에 개행 문자를 인쇄하지만 때로는 그렇지 않은 경우도 있습니다. 이는 스크립트에서 사용하거나 플래그에 의해 강제되는 경우에도 -1
마찬가지입니다 . 각 파일 끝에는 개행 문자가 있습니다. 무엇을 가지고각 개행 문자가 새 파일 이름을 나타낸다는 보장은 없습니다.. 실제로 파일 이름 자체에 개행 문자가 포함되어 있으면 ls 출력을 전혀 구문 분석할 수 없습니다. 다음 파일 이름을 고려하십시오.
file1
file2\nfile3
file4
디렉터리에 이 디렉터리가 포함되어 있으면 ls -1
다음과 같은 내용이 표시됩니다.
file1
file2
file3
file4
당연히 4개의 파일이 있다고 생각하지 않겠습니까? ls 출력을 구문 분석하는 모든 스크립트에서도 마찬가지입니다. 실제로 세 개의 파일이 있는데 그 중 하나는 이름이 까다롭지만 ls.*의 출력에서는 이를 알아낼 수 없습니다.
* 이 플래그를 사용하고 출력이 중단되었음을 확인하지 않는 한 -l
스크립트는 계속 차단됩니다 .