`

eval命令的使用

 
阅读更多

eval

eval arg1 [arg2] ... [argN]

将表达式中的参数,或者表达式列表,组合起来,并且评估它们.包含在表达式中的任何变量
都将被扩展.结果将会被转化到命令中.这对于从命令行或者脚本中产生代码是很有用的.

写了个脚本测试

#!/bin/bash
y=`eval ls -l`
echo "$y"
echo "--------------------------------------"
for i in ls df
do
value=eval $i
echo $value
done
exit 0

输出

[root@nms probe_test]# ./eval.sh
总计 24
-rwxr-xr-x 1 oracle oinstall 157 04-14 09:29 29.5.sh
-rwxr-xr-x 1 oracle oinstall 108 04-14 12:12 29.6.sh
-rwxr-xr-x 1 oracle oinstall  93 04-14 12:47 33.sh
-rwxr-xr-x 1 oracle oinstall 139 04-14 14:19 eval.sh
-rwxr-xr-x 1 oracle oinstall  34 04-14 08:40 restart.sh
-rwxr-xr-x 1 oracle oinstall  44 04-14 09:06 test.sh
--------------------------------------
29.5.sh  29.6.sh  33.sh  eval.sh  restart.sh  test.sh

文件系统               1K-块        已用     可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
                      23297916   8251172  13844160  38% /
/dev/hda1               101086     10784     85083  12% /boot
tmpfs                   257800         0    257800   0% /dev/shm
/dev/hdb1              1031800     17692    961696   2% /mnt/ultrapower

 

这里可以看出使用了eval后,eval将会评估"df"和"ls",他们被解释成命令,而不是字符串本身

如果去掉eval又有啥不同呢?

看输出

[root@nms probe_test]# ./eval.sh
总计 24
-rwxr-xr-x 1 oracle oinstall 157 04-14 09:29 29.5.sh
-rwxr-xr-x 1 oracle oinstall 108 04-14 12:12 29.6.sh
-rwxr-xr-x 1 oracle oinstall  93 04-14 12:47 33.sh
-rwxr-xr-x 1 oracle oinstall 134 04-14 14:21 eval.sh
-rwxr-xr-x 1 oracle oinstall  34 04-14 08:40 restart.sh
-rwxr-xr-x 1 oracle oinstall  44 04-14 09:06 test.sh
--------------------------------------
ls
df

第一个去掉eval并无什么不一样,因为使用了``,第二个eval去掉了,就把df和ls当初字符串来解释了。

 

有一个例子

运行脚本的 shell 一般都是非交互的shell. 但脚本仍然可以存取它拥有的终端. 脚本里甚至可
以仿效成可交互的 shell

这个例子不知道在实际写脚本的时候会有什么用,先记录下

#!/bin/bash
my_prompt='$'
while :
do
echo -n "$my_prompt"
read line
eval "$line"
done
exit 0

输出

[root@nms probe_test]# ./33.sh
$ls
29.5.sh  29.6.sh  33.sh  eval.sh  restart.sh  test.sh
$ll
./33.sh: line 7: ll: command not found

 

会把读入的line当做命令来执行

 

 

分享到:
评论

相关推荐

    Linux eval命令用法详解

    Linux eval命令 Linux eval命令用于重新运算求出参数的内容。 eval可读取一连串的参数,然后再依参数本身的特性来执行。 语法eval [参数] 参数说明:参数不限数目,彼此之间用分号分开。 实例 连接多个命令 # eval ...

    ide-eval-resetter idea重置试用期脚本

    idea 重置试用期脚本 ide-eval-resetter 1. 下载下来,解压 2. idea 点击试用并随便创建一个项目 3. 将ide-eval-resetter.zip压缩包直接拖进idea编辑器中

    ide-eval-resetter-2.1.13.zip

    使用方法: 1.首先将文件拷贝到任意的linux系统中 2.执行命令 sh ide-eval-resetter.sh 即可导出文件

    Faster R-CNN中voc_eval.py文件

    借助Faster R-CNN中voc_eval.py文件,测试YOLO测试数据集mAP等结果,博客见

    lde-eval-resetter idea重置试用期脚本

    使用方式: 1、给下载的ide-eval-resetter.sh放在任何带有linux环境中 2、使用命令sh ide-eval-resetter.sh 3、给解压的压缩包拖进idea

    谈谈shell中的eval与crontab命令

    本文运用实例介绍了shell中的eval与crontab命令,文章介绍的很详细,有需要的可以参考借鉴。

    python函数eval的使用与利弊

    函数实现将字符串转换为等价的可执行命令,执行一个字符串表达式,并返回表达式的值。 语法 eval(expression[,globals[,locals]]) expression–表达式 globals–变量作用域,全局命名空间 locals–变量作用...

    本人的练习集跟大家分享一下-总的matlab_study.rar

    打开文件并应用,edit、text,button,axes以及eval命令的使用(文件为Engine_Trq_fileopen) GUI调用GUI(文件为GUI_open_GUI) 一个用纯粹的matlab语言编写的GUI(文件为Practice_matGUI) 图线上的右键菜单...

    z-a-eval:Zsh-Zinit附件(即扩展名),该附件可任意缓存慢速命令输出以加快Shell启动的速度

    执行此命令后,您可以使用附件提供的新ice-mods。 怎么运行的 缓慢的初始化命令的输出将重定向到plugin / snippets目录中的文件,并在加载时提供。 下次加载插件/代码片段时,将跳过此源代码,而无需运行初始化命令...

    Golang使用lua脚本实现redis原子操作

    目录 [redis 调用Lua脚本](#redis 调用Lua脚本...redis调用Lua脚本需要使用EVAL命令。 redis EVAL命令格式: redis 127.0.0.1:6379> EVAL script numkeys key [key …] arg [arg …] 最简单的例子: 127.0.0.1:6379

    python 为什么说eval要慎用

    当内存中的内置模块含有os的话,eval同样可以做到命令执行: In [3]: import os In [4]: eval(os.system('whoami')) hy-201707271917\administrator Out[4]: 0 当然,eval只能执行Python的表达式类型的...

    mongodb eval 执行服务器端脚本

    在服务器端可以通过db.eval函数来执行javascript脚本,也可以把javascript脚本保存在数据库中,然后在别的数据库命令中调用. 一、db.eval 执行服务器端脚本 利用db.eval函数可以在MongoDB服务器端执行javascript脚本....

    lldb-eval:lldb-eval是一个用于在调试器上下文中评估表达式的库

    为什么LLDB有一个非常强大的内置表达式评估器(可通过expr命令使用)。 它可以处理几乎所有有效的C ++并执行函数调用。 但是这种功能的缺点是性能不佳,尤其是对于具有大量调试信息的大型程序而言。 对于交互使用而...

    shell编程和unix命令

    3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup...

    Python中eval带来的潜在风险代码分析

    eval是Python用于执行python表达式的一个内置函数,使用eval,可以很方便的将字符串动态执行。比如下列代码: >>> eval("1+2") >>> eval("[x for x in range(10)]") [0, 1, 2, 3, 4, 5, 6, 7, 8, 9...

    chess-engine-eval-debugger:国际象棋引擎网页评估器

    国际象棋引擎评估调试器版本v.0.3运行本地服务器server_python2.py 或者server_python3.py 开启网页 或者防垃圾引擎设置一个或多个引擎设置eval命令,例如河豚8使用eval ,狡猾的使用得分选择协议(uci或xboard) 将...

    CMD以及VBS的所有命令帮助

    Eval GetLocale GetObject GetRef InputBox IsEmpty IsNull IsNumeric IsObject LoadPicture MsgBox RGB Round ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion ...

Global site tag (gtag.js) - Google Analytics