나는 "grep" 시스템 명령을 실행하는 함수가 포함된 R 패키지를 작성했습니다. 이 패키지는 CRAN에서 릴리스되었으며 Solaris 플랫폼에서 테스트하면 오류가 반환되었습니다. 이는 Solaris에서 "grep"의 사용법이 다르기 때문일 수 있습니다. 다음은 이 패키지가 실행하는 명령의 예입니다.
grep --include=\*\.txt --colour=always -n -r -e 'PATTERN'
이 명령은 현재 폴더, 하위 폴더 등에서 발견된 모든 "txt" 파일에서 "PATTERN" 패턴을 재귀적으로 검색합니다(재귀 검색).
이 명령으로 생성된 오류 메시지는 없으며 오류가 발생했다는 것만 알고 있습니다. Solaris에서 동등한 명령은 무엇입니까?
답변1
이 문제의 핵심은 POSIX 호환성과 관련이 있다고 생각합니다. grep
POSIX 표준에 명시된 도구입니다. 의견에서 지적했듯이 POSIX 사양에는 또는 옵션이 grep
포함되어 있지 않습니다 . 실제로 이러한 옵션은 GNU의 일부이며 POSIX 사양에 지정된 것 이상의 기능을 추가합니다 . GNU 매뉴얼은 여기에서 찾을 수 있습니다:--include
--colour
grep
grep
grep
https://www.gnu.org/software/grep/manual/grep.html
Solaris에서 기본 grep
도구는 Sun/Oracle이 제공하는 또 다른 POSIX 호환 구현입니다. 물론 이 구현은 여기에 필요한 옵션을 지원하지 않습니다. Solaris 10 맨페이지를 찾을 수 있습니다.여기, Solaris 11을 찾을 수 있습니다여기.
이 제한은 grep
Solaris의 명령을 초과합니다. 예를 들어, date
Solaris의 명령은 GNU의 명령보다 유연성이 떨어집니다 date
. Solaris 10의 명령은 ps
또한 프로세스 명령줄을 80자로 자릅니다. 이러한 문제에 대한 솔루션/해결책으로 마침내 Solaris 10 및 11에서 GNU 도구를 사용할 수 있습니다.이번 품질검사찾을 수 있는 위치와 설치 방법에 대한 자세한 내용을 확인하세요.
GNU 도구가 Solaris 시스템에 설치되고 도구 이름이 사용되는 경우 a가 g
명령 이름의 접두어로 사용됩니다. date
따라서 , gdate
, , 등이 grep
됩니다 . ggrep
귀하의 경우 이 명령을 사용하면 ggrep
필요한 GNU 특정 옵션(또는 확장)을 지원하므로 문제가 해결될 수 있습니다.
여기서 발생할 수 있는 문제는 Solaris 시스템에 GNU 도구를 설치할 필요가 없다는 것입니다. 이러한 패키지를 설치하려면 몇 가지 추가 작업이 필요합니다. 대상에 GNU 도구가 없으면 이 ggrep
명령을 사용할 수 없습니다.
일반적으로 POSIX 배포판 간의 이식성을 목표로 하는 솔루션은 반대 접근 방식을 취합니다. 각 플랫폼에 특정한 도구를 사용하는 대신 솔루션은 POSIX 사양을 준수하도록 의도적으로 수정되었으며 특정 구현에 특정한 확장을 사용하지 않습니다. 이는 솔루션이 모든 POSIX 호환 시스템에서 일관되게 작동하도록 보장하는 유일한 방법인 경우가 많습니다.