私の目標は、ユーザーが簡単にコピー/貼り付けできる、現在インストールされている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
ユーティリティを使用してこれを作成しました。これは私の仕事には優れていますが、私が最も頻繁に使用する2つのシステムである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
これがあなたが望むようです。
sed
POSIX規格の一部であるため、どこでも利用できる必要があります。
答え2
オプションがあればGNU find
使用できます。-printf
find `php-config --extension-dir` -name "*.so" -printf 'extension=%f\n'