我在我的.bashrc文件中设置了一个函数,允许我轻松地运行我在日常工作中经常使用的命令。有问题的函数:
chkerrors () { egrep -i 'page allocation failure|oom-killer|soft lockup|blocked for more' "$1"; }我通常会在单个文件上运行此命令,例如:
$ chkerrors /var/log/messages但是,在某些情况下,消息文件已转出,因此将有多个消息文件。
简单地运行相同的命令并在末尾抛出一个通配符似乎不能正常工作:
$ chkerrors /var/log/messages*我的问题是,我如何调整我的函数,以便允许我使用通配符运行类似于上面的命令?
谢谢!
发布于 2019-12-04 00:43:34
当您调用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字符的文件将被正确地视为单个参数,而不是一分为二。
https://stackoverflow.com/questions/59161586
复制相似问题