linux - 来自子进程的 Bash 编辑值?

标签 linux bash shell ssh scope

<分区>

好吧,我在处理 Bash 时遇到了麻烦,而且它缺少全局变量。我遇到的问题是,在 while 循环内,我必须执行一个 for 循环,在那个 for 循环内,我将调用一个脚本,我需要动态更改变量 $NAME。不幸的是,在我尝试了几种不同的选择之前,我不知道它是什么。变量在原始过程中设置后永远不想更改。我今天对此做了很多研究,我发现这是因为读取此类文件中的文件会打开一个子 shell,并且它无法在其父进程中编辑值。我尝试制作多个文件以动态导出变量,但这也不起作用。

编辑:这个例子很简单,但它与我在工作中使用的逻辑相同。无法显示工作代码。

#!/usr/bin/env bash
FILE=$1
SCRIPT="FOO"
NAME="TEST"

#create script
cat > "${SCRIPT}" <<EOF
HELLO WORLD, $NAME
EOF

while read line; do
echo $line
echo $SCRIPT
  for i in `seq 1 10`; do
    (
    NAME="MEGAMAN"
    echo $NAME
    )
  done
done < "$FILE"
#echo $NAME
cat > "${SCRIPT}" <<EOF
HELLO WORLD, $NAME
EOF

我的输出:

jose@jose-desktop:~/workspace/Script $ ./Main FOO 
HELLO WORLD, TEST
FOO
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN **this output is fine

它输出的文件:

HELLO WORLD, TEST **This file should say MEGAMAN.

最佳答案

不可能从子进程更改变量,无论是子 shell 还是其他一些 shell 脚本。如果你必须做那样的事情,你必须找到一种方法让子进程与父进程通信。例如,如果您正在调用一个外部脚本并且您想要获取该脚本计算的值并将其存储在父脚本的变量中,您可以让脚本在其标准输出中输出该值,然后将其捕获到父脚本中过程,例如

# child-script.sh:
myvar=.... # compute some value
echo "$myvar" # put that at the end of the script

在父级中,替换行

./child-script.sh

通过

myvar="$(./child-script.sh)"

关于linux - 来自子进程的 Bash 编辑值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39584536/

相关文章:

bash - 如何制作可在任何计算机上使用的可执行 shell 脚本 macOS

从 cron 作业运行时,Bash 脚本返回的值与从命令行运行时返回的值不同

python - 适用于linux ssh命令的python ssh脚本

linux - 初始化脚本挂起整个系统

bash - 出错退出子shell

linux - 包含排除文件夹中的特定文件

linux - Bash 脚本没有产生预期的结果

linux - 如何在 Windows git 沙箱中强制 LF 用于特定文件?

linux - 在初始化脚本中启动时如何设置 session DBus 的环境变量?

linux - 附加一个词以匹配文本