【问题标题】:How to pass a wildcard parameter to a bashrc function如何将通配符参数传递给 bashrc 函数
【发布时间】:2020-03-28 09:41:36
【问题描述】:

我在.bashrc 文件中设置了一个函数,让我可以轻松运行我在日常工作中经常使用的命令。有问题的功能:

chkerrors () { egrep -i 'page allocation failure|oom-killer|soft lockup|blocked for more' "$1"; }

我通常会在单个文件上运行它,例如:

$ chkerrors /var/log/messages

但是,在某些情况下,消息文件已被轮换,因此会有多个消息文件。

简单地运行相同的命令并在最后抛出一个通配符似乎不能正常工作:

$ chkerrors /var/log/messages*

我的问题是,我怎样才能调整我的功能以允许我运行类似于上面带有通配符的命令?

谢谢!

【问题讨论】:

    标签: linux bash function wildcard


    【解决方案1】:

    当您调用chkerrors /var/log/messages* 时,glob 将在调用函数之前扩展bash,例如实际的函数调用是chkerrors /var/log/messages1 /var/log/messages2 /var/log/messages3

    这意味着函数接收多个参数,但您只处理第一个参数$1。相反,您将希望使用 "$@" 处理其所有参数:

    chkerrors () { egrep -i 'page allocation failure|oom-killer|soft lockup|blocked for more' "$@"; }
    

    "$@" 的特殊之处在于它不会像引号通常暗示的那样扩展为单个单词,而是扩展为引用单词的列表,因此与 glob 匹配的每个文件都将被视为您的附加参数egrep 命令,并且包含 IFS 字符的文件将被正确地视为单个参数,而不是一分为二。

    【讨论】:

      猜你喜欢
      • 2022-11-20
      • 2013-10-27
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      相关资源
      最近更新 更多