現在、モバイルアプリの一部のビルド関連タスクに使用しているシェルスクリプトがあります。
BSDとGNUの微妙な違いにより、もともとMac(BSD)で書かれたビルドスクリプトの1つです。
environment=$1
if [[ -z $environment ]]; then
environment="beta"
fi
if ! [[ $environment =~ (live|beta) ]]; then
echo "Invalid environment: $environment"
exit 1
fi
mobile_app_api_url="https://api"$environment".mysite.com"
cp app/index.html.mob MobileApp/www/index.html
sed -i'' "s#MOBILE_APP_API_URL#\"$mobile_app_api_url\"#g" MobileApp/www/index.html
sedコマンドはBSD(Mac)で書かれていますが、ビルドがMacまたはUbuntu(GNU)にある可能性があるため、両方のバージョンで動作するように変更する必要があります。最良の方法は何ですか?
ベストアンサー1
-i
これは、次のフラグを使用して移植性の問題を回避するために行われますsed
。
sed 'sed-editing-commands' thefile >tmpfile && mv tmpfile thefile
sed
つまり、一時ファイルに書き込んでからコマンドが失敗しない場合は、入力ファイルを一時ファイルに置き換えます。
これはsed
私が知っているすべての実装に移植可能です。
一時ファイル名を安全に生成するには、を使用しますmktemp
。これは標準ユーティリティではありませんが、アクセス可能なすべてのUnices(OpenBSD、NetBSD、Solaris、macOS、Linux)で機能します。
tmpfile=$(mktemp)
sed 'sed-editing-commands' thefile >"$tmpfile" && mv "$tmpfile" thefile