bash 스크립트에 "awk"를 넣으면 왜 실패합니까?

bash 스크립트에 "awk"를 넣으면 왜 실패합니까?

프롬프트에서:

ls | awk '{printf("%s\t\t%s\n", $9, $3);}'

인쇄해야 할 내용을 성공적으로 인쇄했습니다. 이것을 파일에 넣으면 4~5개의 빈 줄이 표시됩니다(대략 출력의 줄 수 ls).

$ cat awk-file-owner-simple 
#!/bin/bash
ls | awk '{printf("%s\t\t%s\n", $9, $3);}'
$ ./awk-file-owner-simple 
_
_
_
_

여기서는 _빈 줄을 나타냅니다(Stackexchange의 코드 포맷터를 사용하여 표시할 수 없음).

답변1

로 변경 .ls |ls -l |

분명히 셸에서 별칭을 사용하고 있습니다 ls( ls -l아마도 함수 및/또는 기타 옵션). 이를 사용하여 type ls실제로 실행하는 내용을 확인하세요. 스크립트에는 별칭이 없으므로 정상적으로 실행되고 ls단일 출력 열이 있습니다.

답변2

또는 coreutils 패키지의 stat(1)을 사용하십시오.

stat --printf="%-20n %U\n" *

관련 정보