[英]Set env var in bash script
我不得不承认我对 bash 脚本非常生疏。 我想设置 2 个临时环境变量,然后运行一个二进制文件。
命令是这样的:
ENV_1=firstparam ENV_2=secondparam my_binary
我想在 bash 脚本中移动 2 env var 分配并使用如下命令:
setparams.sh my_binary
设置参数.sh
#!/bin/bash
ENV_1=firstparam
ENV_2=secondparam
这里有什么问题? 为什么没有设置变量?
默认情况下,所有用户定义的变量都是本地的。 它们不会导出到新流程。 使用export命令导出变量和函数
export ENV_1=firstparam
export ENV_2=secondparam
此外,您应该调用source (在当前 shell 中执行作为参数传递的文件内容的内置命令),而不是执行:
source setparams.sh && my_binary
由于您将my_binary
作为参数传递给脚本,因此我假设您希望脚本 (a) 设置环境变量,然后 (b) 调用您发送的命令。
一种方法是:
#!/bin/bash
ENV_1=firstparam ENV_2=secondparam "$@"
"$@" 扩展为您传递给脚本的 arguments 列表。
如果您像这样设置变量,它们将在您在同一命令行上运行的任何命令的环境中被继承,但不会被任何后续命令继承。
如果您想使用这些环境变量执行多个命令,您可以执行以下操作:
#!/bin/bash
export ENV_1=firstparam
export ENV_2=secondparam
some_command
some_other_command
然后$ENV_1
和$ENV_2
将出现在some_command
和some_other_command
的环境中——但在set_params.sh
完成后不会出现在您的 shell 的环境中。
如果您想要一个脚本来设置将在您的交互式 shell 中可用的环境变量,您必须使用. ./set_params.sh
. ./set_params.sh
或source./set_params.sh
。 (在这种情况下,您不需要顶部的#!/bin/bash
,因为它将在您当前的 shell 中执行。)
您需要导出环境变量:
设置参数.sh
#!/usr/bin/env bash
# Export environment variables
export ENV_1=firstparam
export ENV_2=secondparam
# Launch binary with its provided arguments
"$@"
测试它:
./setparams.sh bash -c 'echo "$ENV_1"'
Output:
firstparam
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.