理解shell的eval命令

Posted 一见

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解shell的eval命令相关的知识,希望对你有一定的参考价值。

看以下两条命令:
[[email protected] /sys]$ a="ls";b="$a";c="$b";"$c"
Hey! No command ‘$a‘ found, did you mean ‘ia‘?

[[email protected] /sys]$ a="ls";b="$a";c="$b";eval "$c"
block bus class dev devices firmware fs kernel module power

eval命令的作用是再次扫描解释,可多次叠加,如:
[[email protected] /sys]$ a="ls";b="$a";c="$b";eval "$c"
Hey! No command ‘$a‘ found, did you mean ‘ia‘?
[[email protected] /sys]$ a="ls";b="$a";c="$b";eval eval "$c"
block bus class dev devices firmware fs kernel module power

附: 关闭文件描述符函数,并导出该函数给子进程使用
close_all_fd()
{
    # 0, 1, 2, 255
    # compgen -G "/proc/$BASHPID/fd/*
    for fd in $(ls /proc/$$/fd); do
        if test $fd -gt 2; then
            # 关闭文件描述符fd
            eval "exec $fd>&-"
        fi
    done
}
# 导出close_all_fd
export -f close_all_fd
实际应用,可参见:https://github.com/eyjian/libmooon/blob/master/shell/process_monitor.sh












以上是关于理解shell的eval命令的主要内容,如果未能解决你的问题,请参考以下文章

shell eval用法

Shell下的命令代换与eval命令

如何利用shell脚本中的eval命令来构造"智能"命令

shell解析命令行的过程以及eval命令

如何在shell脚本中执行cd命令

shell如何解析命令行以及eval命令