将搜索词附加到日志文件名

将搜索词附加到日志文件名

我编写了一个脚本 ( fetch.sh),使用 在 PDF 文件(旧的数字化 OCR 报纸)中搜索术语PDFGREP。它工作得很好。它会提示用户输入搜索词 ( foo) 和要搜索的文件 ( year.pdf)。

我想将输出捕获到日志中,同时仍在屏幕上显示结果。我成功地用了| tee log3 种方法

  1. 从提示:fetch.sh | tee log

  2. 从提示:fetch.sh | tee log.foo

  3. 在脚本中我可以这样做:

    (
       fetch.sh
    ) | tee log
    

我真正想要的是将其作为其中的一部分fetch.sh但采用以下格式log.foo(文件格式为 2.但执行为 3)。

我已经fetch.sh尝试过:

  • ) | tee log.$foo... 生成名为log.

  • ) | tee log."$foo"... 生成名为log.

  • ) | tee log.'$foo'... 产量log.$foo(字面意思,没有替代$foo

  • ) | tee log.${foo}... 生成名为log.

  • ) | tee log."${foo}" ... yields file named日志。`

  • ) | tee log.'${foo}'... 产量log.${foo}(字面意思,没有替代$foo

在所有情况下,输出都正确捕获,但文件名始终不是我想要的。我做错了什么?

答案1

您遇到的问题是,通过使用( ... ),您将在当前进程的子 shell 中运行所有命令。由于此子 shell 是子进程,因此您分配的任何变量都不会传递给父进程(您的主脚本)。这意味着变量永远不会到达您的tee命令。

解决方案非常简单,在脚本中,您必须在开始括号之前分配变量,然后该变量才可供命令使用tee

例如,如果您要添加的文件扩展名是.txt

foo=txt
(
commands from fetch.sh
) | tee log."$foo"

请注意,我使用了双引号,shell 会将其扩展,以确保在扩展名包含空格(这种情况不太可能发生)的情况下,它在扩展后仍然完好无损。

如果您需要从 fetch.sh 内部进行设置foo,则需要使用另一种方法对脚本的命令进行分组。

相关内容