Shell 2脚本A和B。脚本B中有一些变量将在A中使用。我应该如何操作

Shell 2脚本A和B。脚本B中有一些变量将在A中使用。我应该如何操作,shell,unix,solaris,Shell,Unix,Solaris,我有两个脚本A和B。脚本B中有一些变量将在A中使用。我还必须通过脚本A调用脚本B。我应该怎么做?将两个脚本放在一起?然后你会有一个变量列表,所有的函数都在一个地方。 如果这两个脚本正在做一些非常不同的事情,那么请尝试使它们独立。这听起来像是您有可以从A或B读取的配置信息,如果它是简单的配置信息,那么应该在第三个文件C中指定,该文件使用从A和B两个来源/C机构 如果您试图从A调用B,请在调用B时设置一个变量,然后在A中读取该值,如果您使用的是标准的/B,则在调用B时设置的所有变量都不会复制回A的环

我有两个脚本A和B。脚本B中有一些变量将在A中使用。我还必须通过脚本A调用脚本B。我应该怎么做?

将两个脚本放在一起?然后你会有一个变量列表,所有的函数都在一个地方。
如果这两个脚本正在做一些非常不同的事情,那么请尝试使它们独立。

这听起来像是您有可以从A或B读取的配置信息,如果它是简单的配置信息,那么应该在第三个文件C中指定,该文件使用
从A和B两个来源/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中的代码,那么通过对它们进行寻源,您最终会得到一个在它们之间共享的名称空间,这样您就可以从A调用B中的函数,从B调用A中的函数(请注意,这违反了功能层次结构,被认为是糟糕的编码)。

试试看

 # 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

脚本B中是否有在脚本A中调用时不应执行的代码?回答很好,太糟糕了,OP不能更具体地说明他们试图做什么;-),让我们猜测和第二次猜测。。。祝大家好运。