あるスクリプトから変数の値を取得し、別のスクリプトにインポートする方法は?しかし、問題は、変数の値を取得したいスクリプトに実行したくないいくつかのコマンドがあることです。
これがscript1.shだとしましょう。
variable="Hello"
#some command here e.g. yum check-update
script2.shから:
echo $var
EXPORTコマンドを使用し、./script1.shをscript2.shに入れる方法を見つけましたが、別のコマンドが実行されます。
それでは、変数内でコマンドを実行せずに変数値を取得するにはどうすればよいですか?この質問が明確になることを願っています。よろしくお願いします!
答え1
script1.sh
要約すると、 のすべてのコマンドを実行せずに の値を検索しようとしますscript1.sh
。私はこれがscript1.sh
あなたの制御下にないと仮定します。これは、ベンダーが提供した、頑固な同僚が管理した、または同様の問題のためにscript1.sh
そのまま使用する必要があるためです。
2つの方法を紹介します。最初は、script1.sh
一度に1つずつ特定の変数を取得するのに最適です。
var=$(awk -F'"' '/^variable=/ {print $2}' script1.sh )
echo $var
読み込み用ですawk
(実行せず読み込みのみ)script1.sh
。 awk
で始まる行を見つけて、その行variable=
の二重引用符の後に表示される内容を作成します。の出力はawk
変数としてキャプチャされますvar
。
もっと詳しく:
この宣言は形式です
var=$(...)
。これは、角かっこ内のすべての項目がbashコマンドで実行され、対応する標準出力が変数に割り当てられることを意味しますvar
。括弧内には
awk
次のコマンドがありますawk -F'"' '/^variable=/ {print $2}' script1.sh
。部分的に考えてみましょう。awk
行(レコード)をフィールドに分割します。-F'"'
フィールド区切り文字で二重引用符を使用するように awk に指示します。/^variable=/
awk
で始まる行にジョブを制限するように指示しますvariable=
。したがって、他のコマンドはすべてscript1.sh
無視されます。{print $2}
2番目のフィールドを印刷するように指示しますawk
。これは、二重引用符文字の最初の出現と2番目の出現の間のすべてを意味します。最後のパラメータは
awk
読み取るファイルを示しますscript1.sh
。
上記の方法は、一度に1つの変数で作業するのに適しており、必要に応じて変数の名前を変更できます。
さまざまな変数を扱う方法
にすべての変数を割り当てるには、script1.sh
次の点を考慮してください。
source <(grep -E '^\w+=' script1.sh)
これは、変数の割り当てのように見えるすべての行をgrep
抽出するために使用されます。script1.sh
その後、この行は現在のシェルで実行され、変数が割り当てられます。
この方法を使用する場合は、まずすべての変数が必要か、実行中の操作を妨げる変数がないことを確認してください。そのような場合は、grep
2番目のコマンドを使用して除外できます。
各部分を順番に考えてください。
source file
file
現在のシェルで実行するようにシェルに指示します。<(...)
プロセス置換と呼ばれます。これにより、ファイル名の代わりにコマンドの出力を使用できます。このコマンドは、
grep -E '^\w+=' script1.sh
変数の割り当てのように見えるすべての行を抽出します。コマンドラインでこのコマンドを単独で実行すると、次のような内容が表示されます。variable="Hello" var2="Value2"
など。まず、これを実行して出力を確認して、実行したい行が正しいことを確認する必要があります。
答え2
これを行うには、3つのスクリプトを使用する必要があります。
cat ./script/init_vars.sh
variable_1=value_1
variable_2=value_2
variable_3=value_3
cat ./script/module_1.sh
. ./script/init_vars.sh
printf %s\\n "$variable_1"
cat ./script/module_2.sh
. ./script/init_vars.sh
printf %s\\n "$variable_1"
ファイルが次の場合^それ^これにより、正規表現に頼らずに作業を簡単に実行できます。実行中module_1.sh
またはmodule_2.sh
以下が出力されます。
value_1
答え3
source
他のシェルファイルのファイル変数を読み取るために使用されます。
変数が次var1
のように初期化されたとします。/pathtoFile1/file1.sh
var1='Sridhar'
他のスクリプトからfile2.sh
:
source /pathtoFile1/file1.sh
var2=$var1
これで値がvar2
含まれます。var1