gpt4 book ai didi

linux - 设置环境变量并从 Bash 脚本访问

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:53 25 4
gpt4 key购买 nike

这可能是一个非常愚蠢的问题,但我如何在 Bash 中设置环境变量,然后在 shell 脚本中访问它?

kkeiper@machine:/home/kkeiper $ export APIKEY="adsf"

在 bash 脚本中

#!/bin/bash

echo $APIKEY; # prints a blank line
echo $(env | grep APIKEY); # wouldn't return APIKEY even if it did work, but this also prints a blank string

最佳答案

您展示的应该有效!它对我有用:

$ export APIKEY="asfw"
$ cat script.sh
#!/bin/bash
echo $APIKEY
env | grep APIKEY
$ bash -x script.sh
+ echo asfw
asfw
+ env
+ grep APIKEY
APIKEY=asfw
$ sudo bash script.sh
Password:

$

请注意,您不需要在脚本中使用分号或 echo $(...) 符号 — 但它们也不会造成任何损害。

(已测试 Mac OS X 10.9 Mavericks、Bash 3.2.51。但是,我不认为这有什么关系。只有真正的 Bourne shell 不支持 export VAR=value 符号 — 和这些天你将不得不努力寻找具有该限制的 shell;也许是 Solaris /bin/sh。)

在评论中的问题后添加 sudo 的示例。是的,sudo 取消设置杂散环境变量,例如 APIKEY

关于 sudo 的更多说明:

$ env | wc -l
24
$ env | grep APIKEY
APIKEY=asfw
$ cat script.sh
#!/bin/bash
echo $APIKEY
env | grep APIKEY
env | wc -l
$ bash script.sh
asfw
APIKEY=asfw
23
$ sudo bash script.sh

18
$

总有一天,我会调查 24 和 23 环境变量之间的区别是什么以及为什么不涉及 sudo,但显然 sudo 消除了一些变量(5 或 6 个,具体包括 APIKEY)。

How to ensure that environment variables are preserved?

如果您知道哪些需要保留,那么:

  1. sudo 手册页说:

    -E The -E (preserve environment) option will override the env_reset option in sudoers(5)). It is only available when either the matching command has the SETENV tag or the setenv option is set in sudoers(5).

  2. 您可以安排将环境变量中继到命令环境:

    $ sudo -E bash script.sh
    Password:
    asfw
    APIKEY=asfw
    26
    $ sudo bash -c "APIKEY='$APIKEY' bash script.sh"
    asfw
    APIKEY=asfw
    SUDO_COMMAND=/bin/bash -c APIKEY='asfw' bash script.sh
    19
    $

    SUDO_COMMAND 在环境中的出现很有趣。

    (请注意,bash script.sh 符号是必需的,因为我没有使 script.sh 可执行。如果它是可执行的,我可以输入 script.sh./script.sh 取决于它是否在我的 $PATH 目录中。)

关于linux - 设置环境变量并从 Bash 脚本访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20251474/

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