2つのスクリプトAとB.スクリプトBには、A.で使用されるいくつかの変数があります。

私は2つのスクリプトAとBを持っています。スクリプトBはA.で使用されるいくつかの変数を持っています。私はスクリプトAを介してスクリプトBを呼び出さなければなりません。

0
スクリプトBに、スクリプトAで呼び出された場合に実行するコード を実行するコードはありますか?
追加された 著者 glenn jackman,

3 答え

これは、設定情報が単純な場合は、AまたはBのいずれかから読み取ることができる設定情報を持っているように聞こえ、を使用してAとBの両方から供給される第3のファイルCに指定する必要があります。 ./C メカニズムを使用します。

AからBを呼び出そうとしている場合は、Bの呼び出しで変数を設定してからAでこの値を読み取り、標準の ./ B を使用している場合は、すべての変数Bの呼び出しで設定されているものは、Aの環境にコピーされません。

スクリプト間で変数を共有する最も賢明な方法は、呼び出されたスクリプトがAが一時ファイルに使用する必要がある変数を出力し、Bが実行したと判断したAからソースを出力することです。より複雑な方法は、BをAで評価される評価可能なストリングにエコーすることを含む。 Bが含まれる場合:

#!/bin/bash -p
echo var=22

そして次に私はそうする:

output=$(./B)
eval $output
echo $var

私は出力 22 を得るでしょう。これは正しいことをするのはやりにくいので、スクリプトの間で短い変数リストが転送される場合にのみ依存する必要があります。

スクリプトに変数を共有させるための本当の方法は、関数にのみ関数を含めることです。また、AとBの関数を呼び出すマスタースクリプトを用意することもできます。

#!/bin/bash -p

. ./A
. ./B

do_a_stuff
echo $shared_variable
do_b_stuff
echo $shared_variable

AのコードがBのコードに依存している場合は、それらをソースすることによって、それらの間で共有される単一の名前空間になります。したがって、BのAとBの関数をBから呼び出すことができます機能的階層の違反、および貧弱なコーディングとみなされます)。

1
追加された
優れた答え、あまりにも悪いOPは、彼らがやろうとしていることについてもう少し具体的なものではありません;-)、私たちは推測と第二の推測を残しました...すべてに幸運。
追加された 著者 shellter,

試す

 # cat B
 #!/bin/bash
 echo "Date is: `date`"

 # cat A
 #!/bin/bash
 echo "You are login as: `whoami`"
 echo "`/bin/sh ./B`" # exact path for the script file

出力:

  # ./A
  You are login as: root
  Date is: Thu Oct 17 02:56:36 EDT 2013
0
追加された

一緒に2つのスクリプトをマージしますか?その後、あなたは1つのバリエーションのリストを持ち、すべての機能は1つの場所にあります。 これらの2つのスクリプトがいくつかの非常に異なることをしている場合は、それらを独立させるようにしてください。

0
追加された