为什么要避免使用BASH,我应该使用什么呢?

为什么要避免使用BASH,我应该使用什么呢?

一次又一次,我看到堆栈溢出上的Bash答案eval答案被抨击,双关有意,用于使用这样的“邪恶”结构。为什么eval这么邪恶?

如果eval不能安全使用,我应该用什么?


守着一只汪
浏览 909回答 3
3回答

慕慕森

如何制作eval安全eval 能,会,可以要安全地使用-但它的所有论点都需要首先引用。以下是如何:这个为你服务的功能:function token_quote {   local quoted=()   for token; do     quoted+=( "$(printf '%q' "$token")" )   done   printf '%s\n' "${quoted[*]}"}示例用法:给定一些不受信任的用户输入:% input="Trying to hack you; date"构造一条命令以使val:% cmd=(echo "User gave:" "$input")把它,和.看似正确引用:% eval "$(echo "${cmd[@]}")"User gave: Trying to hack youThu Sep 27 20:41:31 +07 2018注意你被黑了。date被执行而不是按字面印刷。代之以token_quote():% eval "$(token_quote "${cmd[@]}")"User gave: Trying to hack you; date%eval不是邪恶-它只是被误解了:)

杨__羊羊

关于ls -la /path/to/foo | grep bar | bash或(ls -la /path/to/foo | grep bar) | bash?
打开App,查看更多内容
随时随地看视频慕课网APP