试图获得两个 bash 具有管道和可选参数的函数
trying to get a two bash functions with piping and optional args working
我有两件事,一个是函数,另一个是别名,但它们不能正常工作。
第一个用于拖尾日志,但仅显示前 3 行,方法是找到您要查找的日志的重要部分,然后显示接下来的两行或您指定的任意行数。
# tail -f | grep -A 2
function tinput() {
if [ "" != "" ]
then
$(tail -f | grep -A )
else
$(tail -f | grep -A 2)
fi
}
假设我是这样使用它的:
tinput /var/log/webapps/app.name.com.error.log,#<.*Error:
它的错误是这样的:
zsh: no such file or directory: .*Error:
我不确定,但也许它没有正确看到 args 或因为我正在做管道?
第二个是:
function loadmysqldump() {
$(pv | mysql -u root )
}
它是为了让 mysql db dump 恢复状态更明显(为什么程序不使用一些东西来表明它正在工作我不知道,即使是微调器也会很好)但不是讨厌 -v
.
好吧,我承认我犯了一个错误,出于某种原因,我忘记了终端中的参数是由空格分隔的,而不是撇号,所以它确实有效;坦率地说,我只使用 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:"
在上述 none 个案例中,您需要命令替换吗?
function loadmysqldump() {
pv | mysql -u root
}
function tinput() {
if [ "" != "" ]
then
tail -f | grep -A
else
tail -f | grep -A 2
fi
}
如果 </code> 为空或未设置,您可以显着重构 <code>tinput
以指定 2 作为 -A
选项的默认值。
function tinput() {
tail -f | grep -A ${3:-2}
}
我有两件事,一个是函数,另一个是别名,但它们不能正常工作。
第一个用于拖尾日志,但仅显示前 3 行,方法是找到您要查找的日志的重要部分,然后显示接下来的两行或您指定的任意行数。
# tail -f | grep -A 2
function tinput() {
if [ "" != "" ]
then
$(tail -f | grep -A )
else
$(tail -f | grep -A 2)
fi
}
假设我是这样使用它的:
tinput /var/log/webapps/app.name.com.error.log,#<.*Error:
它的错误是这样的:
zsh: no such file or directory: .*Error:
我不确定,但也许它没有正确看到 args 或因为我正在做管道?
第二个是:
function loadmysqldump() {
$(pv | mysql -u root )
}
它是为了让 mysql db dump 恢复状态更明显(为什么程序不使用一些东西来表明它正在工作我不知道,即使是微调器也会很好)但不是讨厌 -v
.
好吧,我承认我犯了一个错误,出于某种原因,我忘记了终端中的参数是由空格分隔的,而不是撇号,所以它确实有效;坦率地说,我只使用 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:"
在上述 none 个案例中,您需要命令替换吗?
function loadmysqldump() {
pv | mysql -u root
}
function tinput() {
if [ "" != "" ]
then
tail -f | grep -A
else
tail -f | grep -A 2
fi
}
如果 </code> 为空或未设置,您可以显着重构 <code>tinput
以指定 2 作为 -A
选项的默认值。
function tinput() {
tail -f | grep -A ${3:-2}
}