스크립트에서 명령 호출 및 스타일 유지

스크립트에서 명령 호출 및 스타일 유지

Linux에서 실행되는 스크립트에서 명령을 호출하고 있습니다. 이 예에서는 ls디렉터리 내용을 나열합니다.

ls스크립트에서 호출할 때 while출력을 한 줄씩 읽는 간단한 루프를 수행합니다.

echo그런 다음 큰따옴표(예: )를 사용하여 줄을 인쇄합니다 echo "$line". 모든 줄을 에코하지만 모든 스타일(색상)을 잃습니다.

라인 작업을 직접 하면서 모양을 유지하려면 어떻게 해야 합니까?

답변1

여기에는 두 가지 문제가 있습니다. 우선, 디렉토리에 있는 파일을 처리하는 방식이 완전히 잘못되었습니다. 파일 이름에 줄 바꿈이나 기타 이상한 내용이 포함되어 있으면 작동이 중단될 것입니다. 바라보다http://mywiki.wooledge.org/ParsingLs더 알아보기.

즉, 색상은 ls선택 사항입니다. 많은 Linux 배포판에서 이 명령은 실제로 tty로 인쇄할 때(예를 들어 루핑과 반대) 색상을 활성화하는 ls별칭입니다 . ls --color=tty그러나 별칭은 일반적으로 스크립트에서 활성화되지 않으므로 스크립트에서 실행하면 색상 없이 정상적으로 실행됩니다.lswhilelsls

따라서 첫 번째 해결 방법은 을 호출하는 것입니다 ls --color=always. 이렇게 하면 색상을 일치시킬 수 있습니다. 그러나 첫 번째 단락에서 언급했듯이 이는 거의 확실히 나쁜 생각입니다. 한편으로 각 줄을 인쇄하고 싶다면 그냥 실행 하고 루프를 ls잊어 버리는 것이 어떨까요?while

다른 이유로 파일을 처리해야 하고 여전히 를 사용하려는 경우 lsglobbing을 사용하여 파일 목록을 가져온 다음 ls각 파일을 수동으로 실행합니다.

for file in *; do
    ls -d --color=always -- "$file"
done

이상한 파일 이름으로 인해 문제가 발생하지 않으며 원하는 대로 색상이 계속 표시됩니다.

관련 정보