설치된 PHP 확장 목록 생성

설치된 PHP 확장 목록 생성

내 목표는 사용자가 간단히 복사/붙여넣을 수 있는 현재 설치된 PHP 확장(*.so 파일) 목록을 생성하는 가능한 한 간단한(그러나 더 간단하지는 않음) 프로그램을 작성하는 것입니다.php.ini. 최소한 OS X 및 일부 주요 Linux 배포판(Ubuntu, Arch Linux, RHEL 등)과 호환되어야 합니다.

예상 출력은 다음과 같습니다.

extension=iconv.so
extension=mcrypt.so
...

지금까지 나는 이것을 생각해 냈습니다.

find `php-config --extension-dir` -name "*.so" | rev | cut -d / -f 1 | rev

꽤 잘 작동하지만 모든 문자열 반전이 약간 투박한 것 같은 느낌이 듭니다. 또한 확장만 생성하고 접두사를 추가하지 않습니다 extension=.

확장 디렉터리의 깊이에 관계없이 reverse를 사용해야 하므로 미리 결정된 경로 구분 기호 위치에서 문자열을 간단히 잘라낼 수는 없습니다. 하지만 첫 번째 구분 기호 끝부터 잘라내면 파일 이름만 얻을 수 있다는 것을 알고 있습니다.

그러다가 알게 됐어replace유틸리티를 사용하여 이것을 작성했습니다. 이는 내 작업에는 훌륭하지만 내가 가장 자주 사용하는 두 시스템인 OS X와 ​​Arch Linux에서는 작동하지 않는 것 같습니다.

find `php-config --extension-dir` -name "*.so" | replace `php-config --extension-dir`/ 'extension='

기본적으로 저는 이 작업을 수행하기 위한 다른 창의적인(그러나 간단한) 방법을 찾고 있습니다. 어떤 다른 유틸리티를 사용할 수 있나요? 저를 교육해주세요! :)

답변1

이건 어때?

find "`php-config --extension-dir`" -name "*.so" | sed 's!^.*/!extension=!'

각 줄에 대해 ( )로 시작하고 ( )로 끝나는 가장 긴 문자열이 sed일치됩니다 . 탐욕스러운 일치이기 때문에 항상 마지막 항목까지 모든 항목과 일치합니다. 즉, 모든 항목과 일치합니다.^//하지만파일 이름. 그런 다음 extension=.

결과는 다음과 같습니다.

$ find "`php-config --extension-dir`" -name "*.so" | sed 's!^.*/!extension=!'
extension=pdo_pgsql.so
extension=pdo_sqlite.so
extension=mysqlnd.so
extension=mysqli.so
extension=enchant.so
extension=pgsql.so
extension=mysql.so
extension=pdo_odbc.so
extension=odbc.so
extension=curl.so
extension=pdo.so
extension=pdo_mysql.so
extension=sqlite3.so

이것이 당신이 원하는 것 같습니다.

sedPOSIX 표준의 일부이므로 어디에서나 사용할 수 있어야 합니다.

답변2

옵션이 있으면 GNU find사용할 수 있습니다.-printf

find `php-config --extension-dir` -name "*.so" -printf 'extension=%f\n' 

관련 정보