.bashrc를 사용하여 OS/X 및 Linux에서 ls 표시 색상을 만들 수 있나요?

.bashrc를 사용하여 OS/X 및 Linux에서 ls 표시 색상을 만들 수 있나요?

저는 개인용 컴퓨터에서 OS/X를 실행하고 원격 서버에서 Linux를 실행하고 있습니다. (Xserve가 아직 만들고 있었을 때에도 Xserve를 살 여유가 없었습니다.) 저는 두 파일 모두에 동일한 .bashrc 파일을 사용하고 싶고, 실행 파일, 디렉토리 등을 식별할 수 있도록 ls에 색상을 표시하고 싶습니다. .

그러나 Linux의 GNU는 명령줄 스위치가 ls표시될 것으로 예상하며 --colors, 그렇지 않으면 색상 표시를 거부합니다. Apple(BSD?)은 색상을 표시하도록 지시하기 위해 쉘 변수를 ls보는 것을 선호합니다 .export CLICOLORS=1

ls나는 둘 다 할 것이지만, --colors애플은 알 수 없는 스위치를 발견하면 포기할 것이다.

ls스위치가 승인되었는지 감지한 다음 별칭을 추가할지 여부를 결정할 수 있는 좋은 방법이 .bashrc에 있습니까 --colors?

답변1

이식 가능한 작업을 수행하려는 경우 플랫폼이 아닌 기능을 테스트하십시오.

if ls --help 2>&1 | grep -q -- --color
then
    alias ls='ls --color=auto -F'
else
    alias ls='ls -FG'
fi

플랫폼이 변경되면 플랫폼 테스트가 중단됩니다. macOS는 현재 BSD와 GNU 사용자 영역 도구의 조합을 제공하지만 이 조합은시간이 지남에 따라 변화BSD 도구를 활용하세요. 따라서 두 가지가 서로 다른 방식으로 구현하는 기능에 의존하는 경우 Apple이 의존하는 GNU 도구를 가장 가까운 BSD 도구로 교체하면 "macOS"에 대한 테스트가 실패할 수 있습니다. 기능 테스트는 변화에도 불구하고 계속해서 유용한 경우가 많습니다.

보너스로 때로는 처음에 테스트하지 않은 플랫폼에 대한 지원을 생성하게 되는 경우도 있습니다. 예를 들어, 위의 스크립트 조각은 Solaris 및 FreeBSD에서도 올바른 작업을 수행해야 합니다.

(덧붙여서, 이것이 GNU Autoconf의 철학이며, 이것이 configure10년 전에 작성된 스크립트가 오늘날에도 여전히 새로운 시스템에서 실행될 수 있는 이유입니다.)

별칭을 적절하게 수정합니다. 글을 쓰는 시점에 가장 가까운 macOS 및 Linux 시스템에서 사용한 값만 표시하고 있습니다.

답변2

리눅스인지 확인한 후 설정하시면 됩니다 ls. 즉:

export CLICOLORS=1
if uname -a | grep Linux >/dev/null; then
  # your linux ls stuff
fi

관련 정보