试图获得两个bash函数与管道和可选的参数工作
问题描述:
我有两件事,一个是一个函数,另一个是别名,他们不太正常工作。试图获得两个bash函数与管道和可选的参数工作
第一个是拖尾日志,但只显示前3行,方法是找到要查找的日志的重要部分,然后显示接下来的两行或您指定的很多行。
# tail -f $1 | grep $2 -A 2
function tinput() {
if [ "$3" != "" ]
then
$(tail -f $1 | grep $2 -A $3)
else
$(tail -f $1 | grep $2 -A 2)
fi
}
可以说,我用这样的:
tinput /var/log/webapps/app.name.com.error.log,#<.*Error:
它象这样的错误:
zsh: no such file or directory: .*Error:
我不知道,但也许这不是正确或监守我看到ARGS在做管道?
二是:
function loadmysqldump() {
$(pv $1 | mysql -u root $1)
}
它是使MySQL数据库转储恢复状态一点更明显(为什么程序不使用财产以后证明它的工作,我不知道,即使是微调会不错)但不像做-v
那样讨厌。
好的,所以我承认做了一个booboo,出于某种原因,我忘记了在终端的参数是由空格分隔的,而不是撇号,所以它工作;坦率地说,我只使用grep因为我无法得到我真正想要的,从tail -f
每个单独的输出的前n行,没有其他我试过。
答
你不能(或不应该)这样称呼它:
tinput /var/log/webapps/app.name.com.error.log,#<.*Error:
原因与如何处理zsh
不匹配任何模式做。未加引号的*
的存在使得整个第一个参数成为zsh
试图与现有文件匹配的模式。当它不匹配任何东西时,会引发错误。您可以通过取消设置NOMATCH
选项来更改此行为,这将使zsh
像其他shell一样工作,并按字面处理该模式。更好的解决办法是要明确和引述的说法:上述
tinput "/var/log/webapps/app.name.com.error.log,#<.*Error:"
在没有的情况下,你需要命令替换。
function loadmysqldump() {
pv $1 | mysql -u root $1
}
function tinput() {
if [ "$3" != "" ]
then
tail -f $1 | grep $2 -A $3
else
tail -f $1 | grep $2 -A 2
fi
}
您可以重构tinput
显著指定2作为-A
选项的默认值,如果$3
为空或取消。
function tinput() {
tail -f $1 | grep $2 -A ${3:-2}
}
不知道zsh的,但在bash,你不能使用别名..使用函数变量,而不是..见:https://unix.stackexchange.com/questions/30925/in-bash-何时写脚本以及何时写脚本功能/ 30964#30964 – Sundeep
好,够公平的。 – Thermatix
您正在执行管道命令行的输出'tail -f $ 1 | grep $ 2 -A 2'。为什么使用'$(...)'? – Jdamian