如何尾部作为查找函数的输出给出的文件?

如何尾部作为查找函数的输出给出的文件?

我是 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 -100fPOSIX 未指定。 POSIX 语法是tail -f -n 100
  • POSIXtail最多接受一个参数,如果传递多个参数,则行为是未指定的。一些实现(例如 GNU)tail能够并行监视多个文件,但许多其他实现则不能。您可以尝试安装为此设计的类似尾部的命令multitail
  • $(find...)调用 split+glob 运算符,因此使用默认值$IFS,如果任何文件路径包含空格、制表符、换行符或通配符,则该操作将无法正常工作。如果find没有返回文件,它也会tail以 stdin 结束。

在这里您可以使用zsh命令并将其定义为

tj() multitail ./**/*.o$1(.)

如果没有匹配的文件(而不是tailing stdin),它将报告错误。另请注意,与 相反find,它为您提供排序的文件列表,并跳过隐藏文件或隐藏目录中的文件(D如果需要,请添加 glob 限定符)。


现在,如果根据您的编辑,您看到>当您运行时tj>默认的辅助提示符是什么时候 ( $PS2),那么看起来您更有可能还定义了一个别名tj(该别名可能定义为函数的定义tj,否则会导致函数定义错误tj)。

例如,如果你运行的话,你会看到这样的事情:

alias tj='for sure'

(未终止的for循环),或任何非自包含的代码,并且 shell 会发出辅助提示以供您完成它。

您可以使用取消定义该别名(如果存在,unalias tj则从您的定义中删除它的定义,这样下次运行时它就不会再出现)。~/.bashrcbash

当然,也总是有可能*.o1234找到的唯一文件只包含>.

相关内容