리눅스 대 맥 OS의 배쉬


27

iMac을 구입하고 있습니다. 나는 오랫동안 Linux에서 일해 왔으며 많은 bash 스크립팅을 수행합니다. Mac OS에서 모든 bash 명령과 기능을 사용할 수 있는지 궁금합니다. 누구든지 Mac bash 스크립팅 경험이 있습니까? 귀하의 의견에 감사드립니다.

답변:


32

배쉬 자체는 대부분 동일합니다. 약간의 차이가 있지만 스크립트의 이식성에는 영향을 미치지 않습니다.

가장 큰 문제는 MacOS coreutils가 FreeBSD 기반이고 GNU 유틸리티에서 가장 많이 사용되는 유틸리티라는 것입니다. FreeBSD coreutils가 GNU coreutils와 항상 호환되는 것은 아닙니다. sed , grep , ps기타 유틸리티 의 GNU 및 FreeBSD 버전간에 성능 및 동작 차이가 있습니다 .

당신은 GNU의로 coreutils를 설치할 수 있지만이 g-접두사 (예 gcat에 대한 cat). 그건 좋은 생각이 아니다 는 GNU로 coreutils와 맥 OS로 coreutils 교체.


6
표준 FreeBSD 기반 코어 유틸리티를 사용하면 스크립트의 이식성에 영향을 줄 수 있습니다 (예 : ps와 같이 다른 플래그를 가짐 grep). 내 우분투 스크립트가 Mac에서 동일한 출력을 생성하지 않는 이유를 알아 내려고 두 번 벽에 머리를 부딪쳤다.
Chris Gregg

1
스크립트를 이식 가능하게 작성하려면 www2.opengroup.org/ogsys/jsp/publications/mainPage.jsp 는 POSIX 및 XCU 유틸리티 및 명령에 대한 엄격한 표준 사양을 얻을 수있는 좋은 장소입니다.
kojiro

@ChrisGregg : 동의합니다. 두 도구 세트 사이에 비 호환성이 있음을 강조하기 위해 내 대답에 약간을 추가했습니다.

5

중요한 경우 bashMac OS X Mountain Lion의 버전은 여전히 ​​3.2입니다. 요즘 대부분의 Linux 배포판은 4.x와 함께 제공되므로 버전 4 기능이 누락됩니다. 현재 Homebrew에서 4.2.45 버전을 임시 해결책으로 사용할 수 있습니다. Mavericks의 버전이 무엇인지 모르겠습니다. 아는 사람이 아직 말할 수 있는지 확실하지 않습니다.

다른 사람들이 언급했듯이 (이미 언급 된 버전 이외) bash동일 bash하지만 Mac OS X은 (주로) BSD 사용자 영역을 사용합니다. 많은 표준 시스템 유틸리티에는 약간 다른 옵션이 있거나 약간 다르게 작동합니다. 불행히도 여기에 나열하기에는 너무 많습니다.


2
높은 시에라 4 년 후 bash는 여전히 사용하고 있습니다 : GNU bash는 버전 3.2.57 (1) -release (x86_64에-사과 darwin17) 저작권 (C) 2007 자유 소프트웨어 재단, 주식 회사
네이트 록우드

4

설치 사제 다음 몇 가지 기본적인 유틸리티의 GNU 버전을 설치합니다 (패키지 관리자) :

$ brew install coreutils
$ brew install gnu-sed

각 설치 후에는 수행 할 수있는 단계가 표시 되어 예를 들어 date대신 간단히 호출 gdate할 수 있으므로 수정없이 Linux bash 스크립트를 계속 사용할 수 있습니다.

축하합니다. 크로스 플랫폼 스크립팅 문제의 99 %가 해결되었습니다.


3
반면에 스크립트가 실제로 이식성이있는 경우에는 증상이 아니라 스크립트를 수정해야합니다.
tripleee

2

Linux에서 Mac으로 오는 데 어려움을 겪을 수있는 한 가지 방법은 /proc의사 파일 시스템 이 없다는 것입니다 . 이로 인해 많은 Linux 스크립트가 손상 proc되어 Mac bash 스크립트 에서 찾은 것과 동일한 정보를 얻는 적절한 방법을 찾는 것이 까다로울 수 있습니다 .


0

나는 '주로 리눅스, 가끔씩 맥'사용자이며 다음을 발견합니다.

bash는, ~/.bashrc그리고 ~/.bash_aliases대부분 동일하게 작동합니다.

내가 찾은 문제 중 하나는 Mac에서 색상 프롬프트를 변경하라는 명령 중 하나였습니다. 그 경험과 다른 경험을 통해 .bashrc파일을 설정할 때 터미널 창을 열어두고 로그인하는 법을 배웠습니다 . 그것은 '새 창'을 테스트하고 여전히 로그인 한 오류를 찾을 수 있다는 것입니다.

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