你可以用eval命令做什么?为什么有用?它是 bash 中的某种内置函数吗?没有man它的页面。。
假设我有以下管道:
cmd1 < input.txt |\
cmd2 |\
cmd4 |\
cmd5 |\
cmd6 |\
(...) |\
cmdN > result.txt
Run Code Online (Sandbox Code Playgroud)
在某些条件下,我想cmd3在cmd2和之间添加一个cmd4。有没有办法创建一种条件管道而不将结果保存cmd2到临时文件中?我会想到这样的事情:
cmd1 < input.txt |\
cmd2 |\
(${DEFINED}? cmd3 : cat ) |\
cmd4 |\
cmd5 |\
cmd6 |\
(...) |\
cmdN > result.txt
Run Code Online (Sandbox Code Playgroud) 我试图运行echo ${@:$#},它与我当前的 shell 相呼应。
我发现echo ${#}回声0。
我没有找到有关结果的任何资源。
我试图理解那部分,所以我可以理解我想使用的 docker 脚本。脚本是:
alias enhance='function ne() { docker run --rm -v "$(pwd)/`dirname ${@:$#}`":/ne/input -it alexjc/neural-enhance ${@:1:$#-1} "input/`basename ${@:$#}`"; }; ne'
Run Code Online (Sandbox Code Playgroud) 该站点上的许多答案和评论都提到通常应避免eval在 shell 脚本中使用。这些评论通常是针对初学者的。
我已经看到提到安全问题和健壮性,但很少有例子。
我已经明白命令是什么,以及如何使用它eval。但是,那里给出的答案仅简要提及使用eval. 值得注意的是,每个答案都指出这eval可能是一个主要的安全漏洞,但大多数只是将这一事实作为结束语而没有详细说明。这似乎值得进一步考虑,实际上是它自己的问题。
为什么是用eval一个坏主意?
当将它适当地使用?
是否有任何指导方针可以完全安全地使用它,或者它总是不可避免地存在安全漏洞?
编辑:这篇文章是我在发布这个问题时实际寻找的那种规范参考(答案)。任何滥用的人eval都可以指向此参考。