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 -fsedGNUをインストールしたときに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"

最後に、1つ以上の環境を変更する必要があるか、スクリプト自体を変更する必要があります。

答え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

関連情報