【问题标题】:Need advice for using nested command subsitution需要有关使用嵌套命令替换的建议
【发布时间】:2020-11-18 22:25:10
【问题描述】:

我正试图围绕嵌套命令替换。我尝试嵌套反引号,但显然这不起作用。如果不先声明 ${host} 变量,您将如何嵌套以下内容?

host=$(hostname|cut -c1-14);for id in `aladmin list|grep ${host}|awk '{print $2}'`;do aladmin delete ${id};done

该命令列出服务器上的所有警报,使用 grep 查找主机名的前 14 个字符,然后删除具有 awk 在字段 2 中找到的警报 ID 的警报。

我的问题绝不会重复上一篇文章中的“你好”: How to properly nest Bash backticks

提前致谢, 比约恩

【问题讨论】:

  • grep ... | awk 是一种反模式

标签: linux redhat


【解决方案1】:

在 awk 中做所有事情。没有必要使用 for 循环和 grep 等。有比这更好的方法,但作为第一个近似值,尝试类似:

aladmin list | awk "/$(hostname | cut -c1-14)/"'{ print "aladmin delete " $2 | "sh"}'

【讨论】:

  • 您也可以使用 awk 的 substr 消除对切入的需要。
  • 是的,最终看起来像:awk '$0 ~ substr(h, 1, 14){ print "aladmin delete " $2 | "sh"}' h=$(hostname)
猜你喜欢
  • 2014-10-03
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
相关资源
最近更新 更多