我可以将 source test1.sh 与 gnome-terminal -x 一起使用吗?

我可以将 source test1.sh 与 gnome-terminal -x 一起使用吗?

我正在从主使用源执行 2 个 shell 脚本。

主程序:

#/bin/sh

a=1
b=2
c=3

gnome-terminal -x sh -c ". ./test1.sh|less" (note the source ".")

gnome-terminal -x sh -c ". ./test2.sh|less"
...
...

测试1.sh:

#!/bin/sh

echo "a="$a #doesn't print anything

我可以单独执行以下 2 项,但是当我合并时,我无法访问其他文件中的主变量

  1. gnome-terminal -x sh -c "test1.sh|less"#能够在单独的终端中执行

  2. . ./test1.sh#能够在 test1.sh 中访问来自 main.sh 的变量

答案1

您必须export在子 shell 中引用任何需要的变量。

在您的示例中放入以下语句:

export a b c

在调用之前的某处gnome-terminal。或者,使用 export 语句定义变量:

export a=1 b=2 c=3

我假设您test1.sh尝试使用 source 来解决此export要求(因为源文件由源 shell 解释,而不是在子 shell 中执行)。您忽略的是,打开一个gnome-terminal将启动一个新的壳。

答案2

变量不在单独的 shell 实例之间共享。我所知道的从不同 shell 中启动的脚本访问变量的唯一方法是让脚本将变量写入文件,然后访问该文件。

现在,在您的特殊情况下,您可以将变量的值$a从主脚本发送到测试脚本,如下所示:

主程序:

#/bin/sh

a=1
b=2
c=3

gnome-terminal -x sh -c "test1.sh '$a' | less" # without source "."

# ... some other code

测试1.sh:

#!/bin/sh

a=$1

echo "a=$a"

或者export使用湿地他的回答

相关内容