gpt4 book ai didi

bash - 来自另一个文件的变量回显但在脚本中无法识别

转载 作者:行者123 更新时间:2023-12-04 19:13:42 25 4
gpt4 key购买 nike

我在位于 /home/ubuntu/pub/access.txt 的名为 access.txt 的文件中有一个变量. access.txt 内容如下所示:

SFTP_VAR="JHGSYDDUIGUIGUIGUIG"
SQL_VAR="GUIIGGJHGBJHGJHGJH"

我在同一台机器上有一个脚本文件,它应该可以读取和使用它 SFTP_VAR .我使用 source声明提及access.txt的位置。这是我的脚本文件中的代码。
#!/bin/bash

source /home/ubuntu/pub/access.txt
echo $SFTP_VAR
export SSHPASS=$SFTP_VAR
for f in /home/ubuntu/pub/sfmc/Upstream/Encrypted/* ;
do
echo put "$f"
done | sshpass -e sftp -o StrictHostKeyChecking=no -o HostKeyAlgorithms=+ssh-dss USERNAME@FTP_SERVER_IP:/Import
unset SSHPASS

当我运行我的脚本时,我在第一个 echo 中看到了变量。 .这意味着我的脚本可以看到该文件。但是 export第一次回显后立即执行的命令似乎无法识别我的变量。这是当我用它的实际值替换变量时,或者:
echo 'JHGSYDDUIGUIGUIGUIG'
export SSHPASS='JHGSYDDUIGUIGUIGUIG'

代码工作正常。我在这里缺少什么以及如何读取代码中的这些变量?

最佳答案

编辑:在评论中的进一步讨论中,发现引用问题而不是 session 问题。将 access.txt 文件中的双引号更改为单引号解决了 OP 问题。

我将在下面留下我的原始答案。

你的问题措辞非常糟糕。我想我看到了你的问题,但我不确定。

看来您可能对源和导出的工作方式以及它们如何影响您的 session 存在一些误解。让我们测试一下:

首先创建一个包含此内容的文件,并在脚本的第 6 行给出路径:

VAR1="value of VAR1"
VAR2="value of VAR2"

然后创建这个名为 script.sh 的脚本:
#!/bin/bash
echo "[The variables with the name VAR1 and VAR2 are undefined in out session]"
echo "VAR1: "$VAR1
echo "VAR2: "$VAR2

echo "[Source brings the variables of the file into our session, with them VAR1 and VAR2]"
source /home/X/access.txt

echo "[VAR1 and VAR2 of our session do now have the values specified in the file]"
echo "VAR1: "$VAR1
echo "VAR2: "$VAR2

echo "[A third undefined variable is used - empty]"
echo "VAR3: "$VAR3

echo "[The third variable gets the value of VAR1 and is exported]"
export VAR3=$VAR1

echo "[The third variale is now filled]"
echo "VAR3: "$VAR3

echo "[We unset the variable]"
unset VAR3

echo "[The variable is no longer set]"
echo "VAR3: "$VAR3

echo "[Set it again]"
export VAR3=$VAR1

echo "[Its back now]"
echo "VAR3: "$VAR3

我认为它涵盖了您想做的所有事情。现在开始测试:

第一步:
只需正常调用它 bash script.sh .然后查看标准输出。正如 echo 所描述的那样,一切都应该在那里。

第二步:
现在试试 echo $VAR3从您之前调用脚本的 shell 中。它不应该打印任何东西。脚本完成后变量没有保持它们的值。

第三步:
现在用 export script.sh 再次调用脚本.输出应该看起来就像它在第一步中所做的那样。

第四步:
现在试试 echo $VAR3再次。它现在将打印变量。

这是为什么?

Bash 基于不同的 session 。您在开始 session 后设置的内容不会转移到其他打开的 session 中,并且会在您退出 session 后丢失。

您只需键入 bash 即可开始新 session 。 .但即使这样也不能解决我们的问题。

当你调用你的脚本时,你使用 bash script.sh .这实际上也启动了一个新 session ,然后在该 session 中执行您的脚本。不在您调用它的那个。

完成后退出此 session ,留下设置的变量。这就是为什么你不能通过简单地使用 bash script.sh 来查看它们的原因。

第三步我们使用了 source调用脚本。这将使变量进入我们的 session ,因此我们可以将值打印出来。

但这仍然使它们只是暂时的,因为一旦我们关闭获取脚本的 session ,它们就会消失。

关于bash - 来自另一个文件的变量回显但在脚本中无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45956058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com