And*_*rew 62 bash shell terminal sh command-line-interface
当我尝试运行包含envsubst命令的脚本时,我收到此错误.在线查看,这似乎是一个标准的bash命令,所以我不知道要安装什么才能让它工作.
cob*_*boy 183
brew install gettext
brew link --force gettext
Run Code Online (Sandbox Code Playgroud)
这将在OS X上启用envsubst,并强制它正确链接.它需要安装自制软件.
ymo*_*nad 91
编辑:@cobberboy的anwer更正确.支持他.
brew install gettext
brew link --force gettext
Run Code Online (Sandbox Code Playgroud)
以下是我的回答:
envsubst
包含在gettext
包中.
因此,您可以使用标准构建工具(如make
或使用)自行编译homebrew
.
但是,gettext
在MacOS中安装时似乎没什么问题.有关详细信息,请参阅以下URL:如何在MacOS X上安装gettext
mkl*_*nt0 13
为了消除潜在的混淆:
envsubst
是一个外部可执行文件,因此不是Bash的一部分 ; 外部可执行文件是平台相关的,无论是哪些都可用,以及它们的特定行为和它们支持的特定选项(尽管,希望有一个基于POSIX规范的公共子集)bash
称为builtins,只有它们可以依赖于所有平台.要测试给定命令是否为内置命令,请使用
type <cmdName>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,type envsubst
在macOS 10.13上运行返回-bash: type: envsubst: not found
,您可以从中推断:
envsubst
不是内置的envsubst
不在您的系统中$PATH
(因此可能不在您的系统中)(相比之下,在例如Ubuntu 12.04系统上运行相同的命令会返回envsubst is hashed (/usr/bin/envsubst)
,这会告诉您实用程序存在以及它位于何处.)
虽然通常的警告适用,但是envsubst
使用临时替代方法eval
:eval
仅对您控制或信任的内容使用:
假设一个sample.txt
文件包含带有未扩展变量引用的文本; 例如:
cat > sample.txt <<'EOF'
Honey, I'm $USER
and I'm $HOME.
EOF
Run Code Online (Sandbox Code Playgroud)
相当于:
envsubst < sample.txt
Run Code Online (Sandbox Code Playgroud)
是:
eval "echo \"$(sed 's/"/\\"/g' sample.txt)\""
Run Code Online (Sandbox Code Playgroud)
然而,有一个至关重要的区别:
envsubst
仅扩展环境变量引用eval
将扩大外壳变量引用太 -以及嵌入式命令替换,这是利用了eval
一个安全问题. 归档时间: |
|
查看次数: |
38182 次 |
最近记录: |