在巴什/乌本图,
如果有一个ASCII艺术文件:"ascii- art“在下面
|__ __| ____|/ ____|__ __|
| | | |__ | (___ | |
| | | __| \___ \ | |
| | | |____ ____) | | |
|_| |______|_____/ |_| Client ${CLIENT_ID}我们每次调用它时,是否都要将变量"${CLIENT_ID}“传递给ascii-art?
我们现在称之为:
cat ascii-art下列方法不起作用
1. cat ascii-art | CLIENT_ID="1"或
。command_line_parse.sh -c ${CLIENT_ID} |___/ |_|客户端${CLIENT_ID}
然后
cat ascii-art | CLIENT_ID="1"有什么大师能启发我们吗?谢谢。
发布于 2016-09-29 20:10:05
首先:看看程序figlet、toilet或cowasy。这些可能已经完成了您想要的实现。
如果你想自己写的话:
sed 's/${CLIENT_ID}/42/g' ascii-art发布于 2016-09-29 21:41:46
envsubst工具正是为此目的编写的:
CLIENT_ID=foo envsubst ascii-art这是一个比sed更好的工具,它限制了可能值的范围(如果您的id中有一个/,或者更糟糕的是分号后面跟着另一个sed命令,那么可能会出现严重的bug)。
还请参阅Wooledge wiki上的TemplateFiles,它包括一个本机bash实现,用于没有gettext (包括envsubst)的系统。
发布于 2016-09-29 20:34:25
下面计算文件内容的echo命令:
CLIENT_ID=1000 eval "$(cat <<EOC
echo -e "$(<ascii-art)"
EOC
)"CLIENT_ID=1000为eval命令分配环境变量eval接受这里的文档作为它的单个参数$(<ascii-art),在Bash中,做的和$(cat ascii-art)一样关于可怕的eval的编辑
确实,我们应该避免使用eval。但是,我们也应该理解命令的目的,并在适当的时候使用它。我们应该了解安全风险,并决定是否应该在某些情况下使用eval。
攻击黑客Wiki很好地描述了eval
也许最简单的方法是使用与从脚本运行
bash -c "bash code…"相同的方式工作,除非在eval的情况下,给定的代码是在当前的shell环境中执行的,而不是在子进程中执行。
所以eval只执行我们传递的shell代码。我们多久从Bash脚本执行外部命令?我想,很经常。这些命令只是可信任的可执行文件,很可能是Bash脚本本身。
那为什么要害怕评估一些echo "trusted content"呢?
在某些情况下使用eval是否安全取决于用户(OP)。然而,这个答案无疑给了他一个选择,这是一个替代的解决方案。所以我不明白为什么对这个答案投反对票。
https://stackoverflow.com/questions/39778850
复制相似问题