Linux와 Mac OS X 간에 GNU sed 스크립트를 공유하는 방법

Linux와 Mac OS X 간에 GNU sed 스크립트를 공유하는 방법

sedLinux에서 사용하는 GNU 스크립트가 설치되어 있고 GNUisms /bin/sed가 포함된 것으로 보입니다. Mac OS X를 사용하는 공동작업자가 있습니다. GNU가 아닌 설치 sed, 위치 지정 /usr/bin/sed및 Homebrew(http://mxcl.github.io/homebrew/) sed다음과 같이 GNU를 설치할 수 있습니다.gsed핵심 도구패키지는 에 있습니다 /usr/local/bin/gsed.

현재 스크립트는 로 시작합니다 #!/bin/sed -f. sedGNU를 로 설치할 때 Mac OS X에서 실행되도록 수정하려면 어떻게 해야 합니까 gsed?

또 다른 옵션은 GNUism을 제거하는 것이지만 공동 작업자에게 중간 버전을 테스트하도록 요청하기 위해 Mac OS X을 설치하지 않았기 때문에 약간 어려울 수 있습니다.

답변1

몇 가지 옵션이 있습니다:

  • #!/usr/bin/gsed -f어디에서나 (거기에 있다고 가정 /usr/bin) Shebang으로 사용 하고 Linux 환경이 올바르게 심볼릭 링크되는지 확인하십시오.
  • GNUism을 제거하십시오.
  • sed사용자 디렉터리보다 오래된 디렉터리의 기호 링크 ( /usr/bin/gsed잠재적으로 위험함)/usr/bin$PATH
  • 다음과 같이 래퍼 스크립트를 만듭니다.
#!/bin/sh

script=/foo

type gsed >/dev/null 2>&1 && exec gsed -f "$script"
exec sed -f "$script"

결국 하나 이상의 환경을 변경해야 하거나 스크립트 자체를 변경해야 합니다.

답변2

다음과 같이 스크립트를 시작할 수 있습니다 sed.

\:;s=sed;type gsed >/dev/null 2>&1 && s=gsed; exec "$s" -f "$0" "$@";$:s/^//

이것은 아무 작업도 하지 않으며(비록 스크립트 성능이 약간 저하되지만) 쉘에 의해 해석될 때 sed발견 여부에 관계없이 실행됩니다(둘 다 검색됩니다).gsedsed$PATH

답변3

(내 자신의 질문에 대답하거나 오히려 이 경우에 작동하는 대안을 제공합니다.)

sha-bang으로 시작하는 스크립트라도 에서와 같이 명령줄에서 대상 파일에 적용할 수 있습니다 sed. 이는 Mac OS X에서 스크립트를 .ascript.sedtarget.txtsed -f ascript.sed target.txtgsed -f ascript.sed target.txt

관련 정보