热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用eval运行管道命令

如何解决《使用eval运行管道命令》经验,为你挑选了1个好方法。

我有以下命令行来检查文件系统的可用空间:

fs_used=`df -h /u01 | sed '1d' | sed '1d' | awk '{print $4}' | cut -d'%' -f1`

它工作正常.它返回文件系统上已用空间的百分比(不带%符号).

现在我需要使它变量并使用eval命令运行它.我尝试了以下但它不起作用(退出df:无效选项 - 'd')

df_cmnd="df -h $fs1 | sed '1d' | sed '1d' | awk '{print $4}' | cut -d'%' -f1"
fs_used=eval $df_cmnd

我想,问题是eval无法运行管道命令.真的吗?是否有任何解决方法或替代方法来运行此代码?



1> cxw..:

反斜杠 - 逃避$,并使用$():

#              V                                         V
df_cmnd="df -h \$fs1 | sed '1d' | sed '1d' | awk '{print \$4}' | cut -d'%' -f1"
fs_used=$(eval "$df_cmnd")
#       ^^               ^

这将使用fs1您评估时的值.

但是,实际上,请不要使用eval!改为使用shell函数:

df_cmnd(){
    df -h "$1" | sed '1d' | sed '1d' | awk '{print $4}' | cut -d'%' -f1
}
fs_used=$(df_cmnd /u01)

那你就不用担心逃跑了.

说明

看看如何bash解释你的df_cmnd作业:

$ df_cmnd="df -h $fs1 | sed '1d' | sed '1d' | awk '{print $4}' | cut -d'%' -f1"
$ echo $df_cmnd
df -h | sed '1d' | sed '1d' | awk '{print }' | cut -d'%' -f1
#    ^                                   ^

在我的情况下,fs1是空的,所以我只是得到df -hdf部分.在你和我的情况下,bash替换$4为它的值,这里是空的,因为我没有在带有四个参数的脚本中运行.因此,awk将打印整行而不仅仅是第四个字段.


推荐阅读
author-avatar
肥姐PK老赖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有