sedを使用して変数を別のスクリプトに渡すのは悪い習慣ですか? [閉鎖]

sedを使用して変数を別のスクリプトに渡すのは悪い習慣ですか? [閉鎖]

2つのシェルスクリプトがあります。

そのうちの1つがソースファイルです。ソースコード.sh。このソースファイルは、複数の人がそれぞれ独自のディレクトリを持って使用することになります。

name = "foo"

メインスクリプトメインディレクトリほとんどのコードを実行します。変数を渡す必要がありますname

name = "foo"

sed -i "3i\\$name" /main.sh

/scripts/main.sh

sed -i '3d' /main.sh

このコード部分は事前に作成されました。

sedを削除して次のように書くのが良いでしょうか?

/scripts/main.sh "name"

これはBashの最初のプロジェクトなので、専門知識が限られています。

ベストアンサー1

スクリプトの変更の代わりにパラメーターを使用するようにスクリプトを再作成できる場合は、そうします。

スクリプトを変更したい場合は、いくつかの法的またはコンプライアンスの状況があります。

  1. スクリプトにコマンドラインに渡すには、パラメータが多すぎる可能性があります。この場合、次の作業を行う方が簡単です。
sed -i "s/@PARAM1@/a/" main.sh
sed -i "s/@PARAM2@/b/" main.sh
...
sed -i "s/@PARAM99999@/zzzzzzzz/" main.sh

ただし、この場合は、これらのパラメーターを構成ファイルに入れてスクリプトから読み取ることをお勧めします。

  1. スクリプトは、より大きなスクリプトセットの一部であり得る。sed同じハードコーディングされた値を共有する必要がある複数のスクリプトのループで呼び出すことができます。このアプローチは通常、さまざまなオートメーションジェネレータおよび/またはビルドシステムで使用されます。

ただし、この場合、関連スクリプトは通常二重方式で実行されます。つまり、通常の方法でパラメータを読み込みますが、sedデフォルト値を設定します。それは次のとおりです。

#!/bin/bash
usage() {
  echo "-a=N do something (default value @A@)"
  echo "-b=ABC do something else (default value @B@)"
}

A=@A@
B=@B@
while getopts "a:b:" par; do
  case $par in
   a) A=$OPTARG
       ;;
   b) B=$OPTARG
       ;;
    *) usage
       ;;
  esac
done
echo $A
echo $B

複雑なアプリケーションに複数のスクリプトがある場合は、ループを介してすべてのスクリプトを渡すのが非常に便利ですsed -i "s/@A@/somevalue" $script。最初にデフォルト値を設定した後、パラメータを使用します。

  1. 問題のスクリプトはシェルスクリプトではない可能性があり、パラメータをまったく読み取れません。これは通常、スクリプト自体がいくつかのツール(またはsqlplus)に入力されたときに発生します。これは「スクリプトが変更されている」expect唯一の合法的な状況です。sed

おすすめ記事