我试图将日志作为参数传递给执行以下操作的脚本:
#!/bin/bash
filter(){
grep -E "ERROR|FATAL|WARN|Caused|^[[:space:]]" /app/me/logs/$1
}
#read varName
filter > /app/me/logs/${1}.filtered
cat /app/me/logs/${1}.filtered
但它没有输出任何内容,并且它创建的日志文件中也没有任何内容。我传递给它的命令是这样的:
>>> log_filter test.log
log_filter 是脚本的名称, test.log 是我想要过滤的参数日志,正如你所看到的,我写了“read varName”,如果我将 varName 而不是 $1 传递到每个脚本中,这会起作用,但我不希望这样。
答案1
改变:
filter > /app/me/logs/${1}.filtered
到:
filter "$@" > "/app/me/logs/${1}.filtered"
为什么?每个函数都有自己的位置参数列表。您需要向正在调用的函数提供位置参数列表。
换句话说:函数内部
与主脚本中的不一样。$1
filter
$1
如果您只需要一个参数:
filter "$1" > "/app/me/logs/${1}.filtered"
应该就够了。