作者:肥姐PK老赖 | 来源:互联网 | 2023-01-05 11:40
我有以下命令行来检查文件系统的可用空间:
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 -h
了df
部分.在你和我的情况下,bash替换$4
为它的值,这里是空的,因为我没有在带有四个参数的脚本中运行.因此,awk将打印整行而不仅仅是第四个字段.