如何在 Linux 中使用用户输入的变量值从一个 shell 脚本到另一个 shell 脚本?



我有一个三壳脚本。我必须使用用户输入的值计数从 script1.sh 到 script2.sh。如何使用用户输入的值计数从 script1.sh 到 script2.sh main.sh?

scrip1.sh

read -p 'Enter a number:' count

script2.sh

echo "Count:$count"

main.sh

sleep 1 && ./script1.sh
sleep 1 && ./script2.sh

如何修改子外壳中的全局变量?

这是你真正的问题。

简而言之,你不能!(见这里(

您希望变量$countmain.sh知道,并由执行script1.sh并传递给子 shellscript2.sh进行读取的子 shell 进行修改。

当使用EXPORT或将变量声明为全局变量时,可以将变量从父变量(main.sh(传递给子变量进行读取。例如。

#!/usr/bin/env bash
# This is main.sh
export count=5
./script2.sh
#!/usr/bin/env bash
# This is script2.sh
echo "$count"

运行方式如下:

$./main.sh
5

无法修改变量:

#!/usr/bin/env bash
# This is main.sh
export count=5
./script1.sh
./script2.sh
#!/usr/bin/env bash
# This is script1.sh
count=7

运行方式如下:

$./main.sh
5

你能做什么?

如果要修改父变量,则必须要求script1.sh通过/dev/stdout返回值,然后捕获它。

然后你有两个选择:

  • 声明count全局变量

    #!/usr/bin/env bash
    # This is main.sh
    export count=5
    count=$(./script1.sh)
    ./script2.sh
    
  • 传递countas 和参数

    #!/usr/bin/env bash
    # This is main.sh
    count=$(./script1.sh)
    ./script2.sh "$count"
    #!/usr/bin/env bash
    # This is my script2.sh
    count="$1"
    echo "$count"
    

运行方式如下:

$./main.sh
7

另一种解决方案是利用source

#!/usr/bin/env bash
# This is my main.sh
source ./script1.sh
source ./script2.sh

执行脚本时,要打开新外壳,在新外壳中键入命令,将输出复制回当前外壳,然后关闭新外壳。对环境的任何更改将仅在新 shell 中生效,并且在新 shell 关闭后将丢失。

获取脚本时,您是在当前 shell 中键入命令。对环境所做的任何更改都将生效并保留在当前的 shell 中。

来源:超级用户:执行 bash 脚本与获取脚本有什么区别

最新更新