sed
Linux에서 사용하는 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
. sed
GNU를 로 설치할 때 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
발견 여부에 관계없이 실행됩니다(둘 다 검색됩니다).gsed
sed
$PATH
답변3
(내 자신의 질문에 대답하거나 오히려 이 경우에 작동하는 대안을 제공합니다.)
sha-bang으로 시작하는 스크립트라도 에서와 같이 명령줄에서 대상 파일에 적용할 수 있습니다 sed
. 이는 Mac OS X에서 스크립트를 .ascript.sed
target.txt
sed -f ascript.sed target.txt
gsed -f ascript.sed target.txt