如何使用 envsubst 命令替换环境变量
在使用脚本时,大多数用户都会使用环境变量,但有时他们会使用会带来风险的变量。
因此如果您想替换环境变量,可以使用 envsubst 命令。
在 Linux 上使用 envsubst 命令替换环境变量
envsubst 命令用于获取环境变量的替代,正如其名称所暗示的那样。
但它不会改变你的变量目录。首先,它会寻找变量模式(例如$VARIABLE
或[$VARIABLE]
)。
然后它将用指定的 bash 变量替换找到的变量。
要使用 envsubst 替换环境变量,您必须遵循给定的命令结构:
envsubst [OPTION] [SHELL-FORMAT]
现在,让我们看看如何改变环境变量。
为此,我将使用一个名为的文件,confidential.txt
其中包含以下内容:
A sample file containg password and username!
And should not be shared by any means.
My loging credentials are:
username=$USERNAME
password=$PASSWORD
$USERNAME
现在,为了为和提供替代值$PASSWORD
,首先,我将为它们两个创建一个导出变量:
export USERNAME=abhiman
export PASSWORD=strongphrase
完成导出变量值后,您可以对创建的文件调用 envsubst 命令:
envsubst < confidential.txt
如您所见,值已成功修改!!
类似地,您可以使用 unset 命令取消设置这些变量。让我向您展示如何操作。
首先,取消设置您使用导出命令指定的变量。
就我而言,这些USERNAME
是PASSWORD
:
unset USERNAME PASSWORD
现在,如果再次运行该envsubst
命令,将会出现空格:
如果您对事情的发生过程感到好奇,请让我提醒您我之前提到过的事情。
envsubst 命令仅适用于导出的变量,当我使用 unset 命令时,值为空。
而当 envsubst 命令找不到要替换的值时,就会导致空格。
将输出重定向到特定文件
将输出目录放到终端并不总是最好的做法,在这种情况下,您可以将标准输出重定向到文件。
要将输出重定向到文件,您必须使用>
重定向符号。
例如,在这里,我将把输出重定向到名为的文件Output.txt
:
envsubst < confidential.txt > Output.txt
使用 envsubst 命令和 SHELL-FORMAT 替换特定变量
假设您已经导出了多个环境变量,但只想替换其中的几个。
在这种情况下,您可以使用 SHELL-FORMAT。
语法非常灵活,您只需指定变量,''
然后就可以以多种方式使用它:
它的用法如下:
envsubst '$variable' > file
或者您可以像这样附加多个变量:
envsubst '$variable1 $variable1 $variable3' > file
您甚至可以添加基本文本以便更好地理解:
envsubst 'subsitute the $variable1 and $variable2' > file
相当灵活。对吧?
现在,对于这个例子,我将使用一个名为的文件Substitute.txt
,其中包含以下内容:
Hello, My name is $USER.
And these are login credentials for $SERVICE:
username=$USERNAME
password=$PASSWORD
Not meant for public use!
接下来,我将导出上述文件中使用的每个变量的值:
export USER=sagar export SERVICE=AWS export USERNAME=LHB export PASSWORD=randomphrase
并且无需替换任何特定变量,它应该得到以下输出:
假设我只希望$USER
和的值$SERVICE
反映在输出中,因此我将使用以下内容:
envsubst '$USER $SERVICE' < Substitute.txt
正如您所见,它显示了$USER
和的值,$SERVICE
而保留$USERNAME
和的$PASSWORD
原样。
这是一种处理私人信息的巧妙方法。不是吗?
喜欢玩变量吗?我们还有更多
如果您是开发人员并且喜欢使用环境变量,那么您可以通过以下方法了解每个环境变量的值:
或者,如果你想了解在 bash 中使用变量的不寻常方法,可以按照以下方法操作:
我希望您觉得这篇文章有用,如果您对本指南或任何其他指南有任何疑问,或者只是希望我介绍任何特定主题,请在评论中告诉我。