gpt4 book ai didi

bash - 使用 eval 运行管道命令

转载 作者:行者123 更新时间:2023-12-04 11:56:12 28 4
gpt4 key购买 nike

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

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

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

现在我需要使它可变并使用 eval 命令运行它 .我尝试了以下但它不起作用(退出 df: invalid option -- 'd')
df_cmnd="df -h $fs1 | sed '1d' | sed '1d' | awk '{print $4}' | cut -d'%' -f1"
fs_used=eval $df_cmnd

我猜,问题在于 eval 无法运行管道命令。真的吗?
是否有任何解决方法或替代方法可以运行此代码?

最佳答案

反斜杠转义 $ ,并使用 $() :

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

这将使用 fs1 的值在你评估的时候。

但是,实际上,请 don't use 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 将打印整行而不仅仅是第四个字段。

关于bash - 使用 eval 运行管道命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47794205/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com