OS X의 쉘 명령을 Linux 버전으로 바꾸시겠습니까?

OS X의 쉘 명령을 Linux 버전으로 바꾸시겠습니까?

OS X의 터미널에서 기본적으로 사용할 수 있는 명령은 Linux 버전처럼 작동하지 않는 것 같습니다. 이 모든 것을 실제 GNU Linux 명령으로 어떻게 바꿀 수 있습니까?

예를 들어 sed -i에는 성가신 추가 "" 인수가 필요합니다. 또한 텍스트 파일에서만 작동합니다. 이것은 쓸모가 없습니다.

답변1

일반적인 경우에는 다음을 수행할 수 없습니다(또는해서는 안 된다) 기본 명령을 전혀 바꾸십시오. 그 이유는 많은 시스템 관리 스크립트와 타사 패키지가 OS X에서 기본적으로 수행되는 방식으로 작동하기 위해 이러한 명령에 의존하기 때문입니다.

따라서 시스템 명령을 지우고 호환되지 않는 동작이나 명령줄 인수가 있는 GNU 명령으로 대체하면 아마도 무언가가 손상될 수 있습니다. 특히 원래 Linux 또는 BSD에서 실행되도록 설계된 후 Mac OS X로 "포팅"된 일부 소프트웨어를 사용하는 경우 이러한 유형의 프로그램은 OS X API를 호출하는 대신 쉘 스크립트 및 시스템 명령에 의존할 가능성이 더 높기 때문입니다.

당신은 무엇을~할 수 있다기본값을 덮어쓰지 않고 다른 디렉터리에 GNU 유틸리티를 설치하는 환경을 설치한 다음PATH환경 변수를 조정하십시오시스템 디렉토리를 검색하기도 전에 GNU 디렉토리에 있는 명령에 우선순위를 부여합니다. 대화형 셸을 시작하는 경우에만 PATH를 그런 식으로 설정하도록 이를 연결할 수 있습니다. bash그렇게 하고 싶다면 SU에서 다른 질문을 하거나 검색 할 수 있습니다 .

그러한 환경의 예는 다음과 같습니다.홈브류예를 들어 GNU가 있습니다 sed. Homebrew를 설치한 후에는 다음을 입력할 수 있습니다.

brew install coreutils

그리고 설치GNU Coreutils. 이는 GNU/Linux와 함께 제공되지만 OS X에는 제공되지 않는 sed, date, printfwc기타 많은 도구를 제공합니다. 그러나 기본 OS X 바이너리를 "재정의"하지 않기 위해 g기본적으로 접두사가 붙습니다. 따라서 Coreutils를 설치한 후 GNU sed를 사용하려면 다음을 입력하십시오.

gsed

매번 입력하기가 너무 번거롭다면 PATH에 "gnubin" 디렉토리를 추가하고 sed. 다음을 추가해야 합니다 ~/.bash_profile.

PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"

물론 수프부터 너트까지(커널, X11, syscall 호환성 등) Linux 환경이 필요한 경우 다음과 같은 가상 머신에서 Linux를 실행해야 합니다.버추얼박스. Linux에서 실행되도록 설계된 소프트웨어나 스크립트를 실행해야 하는 경우 이는 안전한 방법입니다.

Homebrew는 Linux 관련 동작이 필요하지 않은 특정 클래스의 프로그램에 대해서만 호환성을 제공합니다. 예를 들어 inotifyLinux에서만 사용할 수 있습니다. drm(Direct Rendering Manager)는 Linux에서만 사용할 수 있습니다. Linux에서만 사용할 수 있고 OS X에는 이에 상응하는 시스템 호출이 존재하지 않는 다소 낮은 수준의 시스템 호출이 있으므로 특정 프로그램을 Linux에서 OS X로 포팅하는 것은 상당한 코드 변경 없이는 비실용적이거나 불가능할 수 있습니다.

답변2

당신은젠투 접두사OS X를 지원하는 경우 다음과 같이 할 수 있습니다.부트스트래핑그런 다음 접두사 디렉터리의 관련 경로를 PATH에 추가합니다. 이미 그렇게 하고 있을 수도 있습니다. 그런 다음 표준 젠투 명령을 사용하여 패키지를 설치할 수 있습니다.

emerge coreutils예를 들어 표준 GNU 유틸리티를 얻을 수 있습니다.

Gentoo는 기본적으로 컴파일된다는 점에 유의하세요.바이너리 호스트 설정대신에. 이는 해당 기사의 후반부에 있는 URL 중 하나를 사용하여 이를 접두사에 PORTAGE_BINHOST="... your url here ..."배치 하는 것입니다../etc/make.conf

답변3

@allquixotic의 게시물에 대한 후속 조치로 다음은 공식 지침입니다.brew install coreutils

모든 명령은 접두사 'g'를 사용하여 설치되었습니다.

이 명령을 일반 이름으로 사용해야 하는 경우 다음과 같이 bashrc에서 PATH에 "gnubin" 디렉터리를 추가할 수 있습니다.

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

또한 bashrc에서 MANPATH에 대한 "gnuman" 디렉터리의 일반 이름을 사용하여 해당 매뉴얼 페이지에 액세스할 수도 있습니다.

MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

답변4

다음 sed에서 미리 컴파일된 바이너리를 다운로드할 수 있습니다.Rudix프로젝트. 추가 Rudix패키지는 다음을 참조하세요.여기그리고여기.

관련 정보