我是 Unix 环境中的新手。我想使用函数监视集群上计算的输出。我已经尝试过这个函数,我已将其放入我的 .bashrc 文件中的别名部分下:
function tj(){
tail -100f $(find . -type f -name "*.o$1")
}
进而
tj 1234
查看文件中的内容dm.o1234
,但我没有得到任何我想要的东西,实际上什么也没有(仅>)。
您知道错误在哪里吗?
答案1
它不知道问题的确切根源是什么,但您的代码位于未指定领土在这里。
function tj()
不是标准函数定义语法,它既不是 Bourne/POSIX 语法(使用tj()
)也不是 Korn 语法(使用function tj
不使用()
)。一些 shell(bash、zsh、pdksh)确实支持它,主要是偶然的。tail -100f
POSIX 未指定。 POSIX 语法是tail -f -n 100
- POSIX
tail
最多接受一个参数,如果传递多个参数,则行为是未指定的。一些实现(例如 GNU)tail
能够并行监视多个文件,但许多其他实现则不能。您可以尝试安装为此设计的类似尾部的命令multitail
$(find...)
调用 split+glob 运算符,因此使用默认值$IFS
,如果任何文件路径包含空格、制表符、换行符或通配符,则该操作将无法正常工作。如果find
没有返回文件,它也会tail
以 stdin 结束。
在这里您可以使用zsh
命令并将其定义为
tj() multitail ./**/*.o$1(.)
如果没有匹配的文件(而不是tail
ing stdin),它将报告错误。另请注意,与 相反find
,它为您提供排序的文件列表,并跳过隐藏文件或隐藏目录中的文件(D
如果需要,请添加 glob 限定符)。
现在,如果根据您的编辑,您看到>
当您运行时tj
,>
默认的辅助提示符是什么时候 ( $PS2
),那么看起来您更有可能还定义了一个别名tj
(该别名可能定义为后函数的定义tj
,否则会导致函数定义错误tj
)。
例如,如果你运行的话,你会看到这样的事情:
alias tj='for sure'
(未终止的for
循环),或任何非自包含的代码,并且 shell 会发出辅助提示以供您完成它。
您可以使用取消定义该别名(如果存在,unalias tj
则从您的定义中删除它的定义,这样下次运行时它就不会再出现)。~/.bashrc
bash
当然,也总是有可能*.o1234
找到的唯一文件只包含>
.