【问题标题】:Two shell scripts using same variable使用相同变量的两个 shell 脚本
【发布时间】:2013-02-18 10:25:16
【问题描述】:

我有两个 shell 脚本 test1.sh 和 test2.sh。
在 test1.sh 我有以下语句:
test1.sh 中,我有一个变量 I,它的值将被 test2.sh

使用
#!/bin/sh
I="10"
echo $I

test2.sh中,同样的变量值会被复制打印出来

#!/bin/sh
J=$I
echo $J

我需要在 crontab 中运行这两个脚本,我尝试了 export 命令,但没有任何效果。

【问题讨论】:

  • 这两个脚本是分开运行的,还是你在调用另一个?脚本的调用顺序是什么?
  • 它们是两个不同的脚本,首先调用test1.sh,然后调用test2.sh。

标签: linux bash shell


【解决方案1】:

将此添加到您的 crontab 中:

. ./test1.sh && ./test2.sh;

然后像这样修改你的 test1.sh:

#!/bin/sh
export I="10"
echo $I

. 第一个将作为源执行并保存变量。

【讨论】:

    【解决方案2】:

    这两个脚本都在它们自己的 shell 中运行,并且只与它们的 父进程 共享它们的环境。如果您希望两个单独的 shell 脚本共享环境变量,则必须在调用脚本之前在父进程中设置(并导出)变量。

    您还可以创建仅设置变量的第三个脚本,并从两个主脚本中获取该脚本。

    【讨论】:

      【解决方案3】:

      如果你想在脚本test2.sh中使用test1.sh的输出,你有两种选择

      • test1.sh 的输出存储在一个文件中,并将该文件读回test2.sh
      • test2.sh拨打test1.sh

      test2.sh:

      #!/bin/sh
      J=$(test1.sh)
      echo $J
      

      正如@Joachim Pileborg 已经建议的那样,您可以在一个脚本中设置(但不能回显)变量并在另一个脚本中获取它

      test1.sh

      I="10"
      J=20
      K=30
      

      test2.sh

      source test1.sh
      # do something with I, J, K
      

      【讨论】:

      • 如果我有多个变量,我应该如何编写代码。
      • @Vishu Joachim Pileborg 已经建议采购脚本。
      猜你喜欢
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多