【问题标题】:Bash Redirecting Output From Multiple Functions to A FileBash 将多个函数的输出重定向到文件
【发布时间】:2014-09-10 22:09:23
【问题描述】:

我正在尝试制作一个脚本,它将一些输出从几个函数重定向到一个文件。这是我的代码的样子。

#!/bin/bash

touch /var/log/test.log
results=/var/log/test.log

outputFormat()
{
    echo "This is outputFormat" >> results
}

outputParseFull()
{

    echo "This is outputParseFull" >> results
    outputFormat;
}

outputParseFull;

运行后,/var/log/test.log 被创建,但文件本身是空白的。我希望文件包含以下内容

这是 outputParseFull

这是输出格式

每个函数必须有一行。我在这里做错了什么?

【问题讨论】:

    标签: bash file function redirect output


    【解决方案1】:

    您正在写入一个名为 results 的文件,而不是使用变量 $results 中的文件名。

    echo "This is outputParseFulll" >> results
    

    应该是

    echo "This is outputParseFulll" >> $results
    

    【讨论】:

      【解决方案2】:

      1.),当使用变量时,您应该使用$results 而不是普通的results

      2.),您可以缩短脚本,重定向函数的输出,例如:

      results="./file"
      touch "$results"
      
      outputFormat() {
          echo "This is outputFormat"
      }
      
      outputParseFull() {
          echo "This is outputParseFull"
          outputFormat;
      }
      
      outputParseFull >"$results"
      

      3.) 始终引用文件名,例如 "$filename"。 (因为它们可以包含空格)

      【讨论】:

      • +1 bash 语法的一个晦涩之处在于,您还可以将输出重定向应用于函数的定义:outputParseFull () { ...; } > "$results"。这会为每次调用重定向函数的标准输出(也就是说,每次调用都会覆盖文件的内容;每次调用函数时使用>> "$results" 附加到文件)。
      • @chepner - 哇 - 这对我来说是新的。要去读它。谢谢! ;)
      猜你喜欢
      • 2015-10-21
      • 2020-03-22
      • 1970-01-01
      • 2021-11-04
      • 2020-08-03
      • 2018-11-07
      • 2016-11-27
      • 1970-01-01
      • 2012-05-21
      相关资源
      最近更新 更多