OS X의 터미널에서 기본적으로 사용 가능한 명령은 Linux 버전처럼 동작하지 않는 것 같습니다. 이들을 모두 실제 GNU Linux 명령으로 바꾸려면 어떻게해야합니까?
예를 들어 sed -i에는 성가신 추가 ""인수가 필요합니다. 또한 텍스트 파일에서만 작동합니다. 이것은 쓸모가 없습니다.
OS X의 터미널에서 기본적으로 사용 가능한 명령은 Linux 버전처럼 동작하지 않는 것 같습니다. 이들을 모두 실제 GNU Linux 명령으로 바꾸려면 어떻게해야합니까?
예를 들어 sed -i에는 성가신 추가 ""인수가 필요합니다. 또한 텍스트 파일에서만 작동합니다. 이것은 쓸모가 없습니다.
답변:
일반적인 경우 에는 기본 명령을 전혀 바꿀 수 없거나 대체 해서는 안됩니다 . 그 이유는 많은 시스템 관리 스크립트 및 타사 패키지가 OS X에서 기본적으로 작동하는 방식으로 동작하기 위해 이러한 명령을 사용하기 때문입니다.
따라서 시스템 명령을 지우고 호환되지 않는 동작이나 명령 줄 인수를 가진 GNU 동등 명령으로 바꾸면 문제가 발생할 수 있습니다. 특히 원래 Linux 또는 BSD에서 실행되도록 설계된 후 Mac OS X로 "포팅 된"일부 소프트웨어를 사용하는 경우 이러한 유형의 프로그램은 OS X API를 호출하는 대신 쉘 스크립트 및 시스템 명령에 의존 할 가능성이 높습니다.
당신이 할 일은 다음 기본값을 덮어 쓰지 않고 다른 디렉토리에있는 GNU 유틸리티를 설치하는 환경을 설치하고, 당신의 조정 PATH
환경 변수를 명령 그것도 시스템 디렉토리를 검색하기 전에 GNU 디렉토리 내에서 발견하는 것이 우선 순위를 부여하도록. 대화식 쉘을 시작하는 경우에만 PATH를 설정하도록 이것을 연결할 수 있습니다. bash
SU를 사용 하여이 작업을 수행하는 방법을 Google에 알려주 거나 SU에 대해 다른 질문을 할 수 있습니다 (또는 이전에 요청되었으므로 검색하십시오).
이러한 환경의 예로는 예 를 들어 GNU 가있는 Homebrew 가 sed
있습니다. Homebrew를 설치 한 후에는 다음을 입력 할 수 있습니다.
brew install coreutils
GNU Coreutils를 설치하십시오 . 이들은 당신에게 제공 할 것이다 sed
, date
, printf
, wc
그리고 많은 다른 도구되지 않도록 "재정의"기본 OS X의 바이너리 그러나 GNU / 리눅스가 아니라 OS X에서 선박 것을, 그들이로 시작됩니다 g
기본적으로. 따라서 Coreutils를 설치 한 후 GNU sed를 사용하려면 다음을 입력하십시오.
gsed
매번 입력하기가 너무 번거 롭다면, "gnubin"디렉토리를 PATH에 추가하고 GNU sed with를 사용하면 sed
됩니다. 에 다음을 추가해야합니다 ~/.bash_profile
.
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
물론 수프에서 너트 (커널, X11, syscall 호환성 등)에 이르기까지 Linux 환경이 필요한 경우 VirtualBox 와 같은 가상 머신에서 Linux를 실행해야합니다 . Linux에서 실행되도록 설계된 소프트웨어 나 스크립트를 실행해야하는 경우 안전한 방법입니다.
Homebrew는 Linux 특정 동작이 필요하지 않은 특정 클래스의 프로그램에 대해서만 호환성을 제공합니다. 예를 들어 inotify
Linux에서만 사용할 수 있습니다. drm
(직접 렌더링 관리자)는 Linux에서만 사용할 수 있습니다. Linux에서만 사용할 수 있고 OS X에는 해당 기능이없는 다른 저수준 시스템 호출이 있으므로, 특정 코드를 변경하지 않고 Linux에서 OS X로 특정 프로그램을 포팅하는 것은 비현실적이거나 불가능할 수 있습니다.
brew install coreutils
포함되지 않습니다 sed
. 당신은 할 수있는 brew install gnu-sed
이 설치 수 있지만 gsed
하지를 sed
당신이 당신을 업데이트하더라도 $PATH
. 나는 숨기기 맥에 심볼릭 링크를 생성 sed
: ln -s $(which gsed) $(brew --prefix coreutils)/libexec/gnubin/sed
그러나 당신이 아직도해야 할 man gsed
권리 맨 페이지를 참조하십시오.
brew install gnu-sed --default-names
다음으로 설치됩니다 :sed
--default-names
g-prefixed 명령으로 설치 한 다음 oh-my-zsh (적극 권장)를 설치하고 플러그인 gnu-utils를 활성화 할 수 있습니다.
OS X를 지원 하는 젠투 접두사 를 사용할 수 있습니다. 부트 스트랩 한 다음 접두사 디렉토리의 관련 경로를 PATH에 추가하면됩니다. 이것은 이미 당신을 위해 그렇게 할 수 있습니다. 작업을 마친 후에는 표준 젠투 명령을 사용하여 패키지를 설치할 수 있습니다.
emerge coreutils
예를 들어 표준 GNU 유틸리티를 얻을 수 있습니다.
젠투는 기본적으로 컴파일되므로 바이너리 호스트를 대신 설정할 수도 있습니다 . 이것은 기사의 후반에있는 URL 중 하나를 사용 하여 접두사 PORTAGE_BINHOST="... your url here ..."
에 넣는 것입니다 ./etc/make.conf
.
@allquixotic의 게시물에 대한 후속 조치로 다음은 공식 지침입니다. brew install coreutils
모든 명령은 접두사 'g'로 설치되었습니다.
이 명령을 보통 이름으로 사용해야한다면 bashrc에서 "gnubin"디렉토리를 PATH에 추가 할 수 있습니다.
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
또한 bashrc에서 일반 이름 "gnuman"디렉토리를 사용하여 MANPATH에 대한 매뉴얼 페이지에 액세스 할 수도 있습니다.
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"