Mac OS X 유틸리티를 GNU 핵심 유틸리티로 바꾸는 방법은 무엇입니까?


176

Mac OSX와 Linux에서 사용한 유틸리티 명령간에 약간의 차이점이 있음을 발견했습니다. 내 경험을 통일시키고 싶다.

모든 mac 유틸리티를 GNU 유틸리티로 바꾸려면 어떻게해야합니까?


2


16
나는 당신의 좌절에 동조하지만 장기적으로는 그것이 대체 된다면 더 큰 좌절을 일으킬 것이라고 믿습니다 - homebrew아래 언급 된 것과 같이 사용 하는 것이 좋습니다. g( gsed, greadlink, 등) 대신 시스템 유틸리티를 대체.
cwd


3
@cwd에 동의하지 않습니다.를 사용 --with-default-names하면 로컬 사용자에게만 영향을줍니다. 그것은 맥 지향 터미널 유틸리티에 문제가 될 수 있지만, 모든 것을 위해 homebrew를 사용한다면 리눅스를 사용하는 것처럼 보일 수도 있습니다. iterm2와 섞여서, 그것은 나를 위해 훌륭하게 일하고 있습니다. 나는 기본적으로 리눅스 상자를 가지고 집에 있다고 가정 할 수 있습니다.
Ray Foss 2016 년

답변:


206

이것은 g 접두사가있는 GNU 유틸리티에 대한 심볼릭 링크를 다음에 추가합니다 /usr/local/bin/.

brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt grep

brew search gnu다른 패키지를 참조하십시오 . g 접두사없이 명령을 사용하려면 예를 들어 /usr/local/opt/coreutils/libexec/gnubin에서 다른 디렉토리 앞에 추가 하십시오 PATH.

$ brew info coreutils
coreutils: stable 8.21
http://www.gnu.org/software/coreutils
Depends on: xz
/usr/local/Cellar/coreutils/8.20 (208 files, 9.4M)
/usr/local/Cellar/coreutils/8.21 (210 files, 9.6M) *
https://github.com/mxcl/homebrew/commits/master/Library/Formula/coreutils.rb
==> Caveats
All commands have been installed with the prefix 'g'.

If you really need to use these commands with their normal names, you
can add a "gnubin" directory to your PATH from your bashrc like:

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

Additionally, you can access their man pages with normal names if you add
the "gnuman" directory to your MANPATH from your bashrc as well:

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

6
FWIW, 나는 모든 위대한 GNU 유틸에 대한 메타 패키지로 역할을하는 브루 공식이있다 : 볼 shiny-and-gnu.rbgithub.com/al-the-x/homebrew-mine
AL은 X

1
첫 번째 PATH가 작동하지만 MANPATH가 실패했습니다. 왜 그렇습니까? OSX10.10을 사용하고 있기 때문입니까? 나는 $ MANPATH를 반향했고 /usr/local/opt/coreutils/libexec/gnuman:, 나는 원래 MANPATH가 포함되지 않은 것처럼 보인다. 내 bashrc에서 MANPATH conf를 주석 처리 한 후 아무것도 얻지 못했습니다 ecoh $MANPATH. 물론을 사용 man pwd하면 BSD 매뉴얼을 얻었습니다. 이 문제를 해결하는 방법?
Zen

2
의 경우 설치 콘솔 출력에 설명되어 있지 않은 findutils것을 추가해야합니다 PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH".
Sridhar Sarnobat

1
또한,에 대한 올바른 매뉴얼 페이지를 확보하려면 findutils다음에 추가하십시오.$MANPATH /usr/local/opt/findutils/share/man
Christian Long

1
@Zen : MANPATH기본 시스템 값을 유지하기 위해 시작하는 올바른 방법 은 다음과 같습니다 MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}". 열쇠는 구문에 ${var-default_value}있습니다.
dan

49

게다가 brew install coreutils, 당신은 또한 다음과 같은 몇 가지 다른 패키지를 설치해야 할 수도 있습니다 gnu-sed, grep:

brew install findutils
brew install gnu-indent
brew install gnu-sed
brew install gnutls
brew install grep
brew install gnu-tar
brew install gawk

--with-default-names옵션은 2019 년 1 월부터 제거 되므로 g접두사 없이 사용하려면 각 바이너리를 경로에 추가해야합니다 .

이전 참조 ( --with-default-names사용 가능한 경우) : http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/


참고 brew install gawk(모든 다른 사람들과는 달리)를 대체합니다 awk(심볼릭 링크를 통해 /usr/local/bin/awk). 원본을 유지하려면 /usr/bin/awk그냥rm /usr/local/bin/awk
wisbucky

16

교체를 권장 지 모르겠습니다 . 그러나 다른 경로에 설치하여 그런 식으로 활용할 수 있습니다. 전반적으로 Linux에서 왔으며 더 많은 "일반적인"* nix 유틸리티 및 apt와 유사한 시스템에 액세스하려면 Macports를 참조하십시오 . http://www.macports.org

예를 들어, 애플에 포함 된 GCC와는 반대로 최신 "일반"GCC를 예로 사용할 수 있습니다.


3
예를 들어, Mac OS X의 tar 및 zip은 GNU 버전이 아닌 메타 데이터에 대해 알고 있습니다.
lhf

1
Apple에서 제공 한 앱이 있습니다. 일부 명령 줄 도구를위한 GUI 일 뿐이며, 앱을 교체하면 앱이 이상하게 작동하기 시작하므로 교체하지 말고 추가하십시오.
Ɱark Ƭ

권리; Macports와 같은 것이 그들을 추가하지만 그것을 대체하지는 않습니다.
Jonathan

MacPorts에서 기본적으로 GNU 유틸리티를 사용하려면 환경 변수 /opt/local/libexec/gnubin앞에 추가 할 수 있습니다 PATH.
markshep

8

나는 이것을 정확하게하기 위해 스크립트를 작성했습니다! 스크립트는 여기 (또는 아래)에서 볼 수 있습니다 . 그러나이 게시물이 이전에 링크 된 최신 버전의 스크립트를 반영한다고 항상 보장 할 수는 없습니다.

스크립트를 실행하면 Homebrew가 설치되고 (아직 설치되지 않은 경우) 관련된 모든 GNU 유틸리티가 설치되고 (아직 설치되지 않은 경우) PATH설치된 유틸리티에서 변수가 작성됩니다.

#!/bin/bash

# Install Homebrew (if not already installed)
ruby -e "$(curl -fsSL "\
"https://raw.githubusercontent.com/Homebrew/install/master/install)"

# Install required packages from Homebrew
brew tap homebrew/dupes
brew install coreutils binutils diffutils ed findutils gawk gnu-indent gnu-sed \
  gnu-tar gnu-which gnutls grep gzip screen watch wdiff wget bash gdb gpatch \
  m4 make nano file-formula git less openssh python rsync svn unzip vim \
  --default-names --with-default-names --with-gettext --override-system-vi \
  --override-system-vim --custom-system-icons

# Empty the .bash_path file that holds GNU paths
> ~/.bash_path

# Build PATH variable script in ~/.bash_path
for i in /usr/local/Cellar/*/*/bin; do
  echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnubin; do
  echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/share/man; do
  echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnuman; do
  echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done

# Check if .bash_path is being called from .bash_profile
PATCH=`grep "~/.bash_path" ~/.bash_profile`
if [ "$PATCH" == "" ]; then
  # Add Ubuntu-style PS1 to .bash_profile
  cat <<EOF > ~/.bash_profile
export PS1="\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]# "
EOF
  # Add .bash_path to .bash_profile
  echo "source ~/.bash_path" >> ~/.bash_profile
fi

1
중요한 의견이없는 다운 보트를 좋아하지 않습니까? 스크립트 주셔서 감사합니다.
저스틴 포스

@JustinForce 문제 없습니다! 의견을 보내 주셔서 감사합니다.
Clay Freeman

2
-1. 이 스크립트는 너무 많은 마술을합니다. .bash_path@ user495470과 @xuhdev의 답변을 따르는 경우 모든 -mangling이 실제로 필요하지는 않습니다. 그리고 PS1 변경은이 질문의 범위를 완전히 벗어납니다.
Greg Dubicki

1
@GregDubicki 불행히도,이 패키지들 중 일부에는 bash 경로 "mangling"이 필요합니다. 직접 확인할 수도 있습니다. PS1 변경과 관련하여 :이 스크립트는 개인용입니다. 되돌리려는 사람은 매우 쉽게 할 수 있습니다.
Clay Freeman

5

macOS CLI를 새로운 GNU / Linux CLI 환경으로 투명하게 변환하는 스크립트를 작성했습니다.

  • 누락 된 GNU 프로그램 설치
  • 오래된 GNU 프로그램 업데이트
  • 사전 설치된 BSD 프로그램을 선호하는 GNU 구현으로 교체
  • 널리 사용되는 GNU / Linux 배포판에서 공통적 인 다른 프로그램 설치

https://github.com/fabiomaia/linuxify

git clone https://github.com/fabiomaia/linuxify.git
cd linuxify/
./linuxify install

또한 모든 것을 쉽게 취소 할 수 있습니다.

./linuxify uninstall

1
첫 번째 명령 ( git clone git@github.com.:fabiomaia/linuxify.git) 을 실행하려고했습니다. "호스트 'github.com'의 신뢰성을 설정할 수 없습니다." 입력 yes하고 Enter 키를 눌렀습니다. 그런 다음 git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.무엇이 잘못 되었나요?
izogfif

@izogfif HTTPS 대신 복제 시도git clone https://github.com/fabiomaia/linuxify.git
fabiomaia

1
그렇습니다. 답변을 업데이트하십시오 (또한 시작시 해당 달러를 제거하십시오-텍스트를 선택하고 복사하여 콘솔에 붙여 넣을 때 복사됩니다).
izogfif

@izogfif 제안 해 주셔서 감사합니다.
fabiomaia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.