2014-09-10 92 views
0

我试图做一个脚本来将一些输出从一些函数重定向到一个文件。这是我的代码的样子。Bash将多个函数的输出重定向到一个文件

#!/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

这是OUTPUTFORMAT

一号线必须从每个功能。我在这里做错了什么?

回答

1

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

echo "This is outputParseFulll" >> results 

应该是

echo "This is outputParseFulll" >> $results 
1
1.

),使用变量时,应该使用$results代替纯results

2),可以短脚本,重定向从函数的输出,如:

results="./file" 
touch "$results" 

outputFormat() { 
    echo "This is outputFormat" 
} 

outputParseFull() { 
    echo "This is outputParseFull" 
    outputFormat; 
} 

outputParseFull >"$results" 

3)时常引用的文件名,如"$filename"。 (因为它们可以包含空格)

+1

+1''bash'语法的一个不明确的角落是,您还可以将输出重定向应用于函数的定义:'outputParseFull(){...; }>“$ results”'。这将重定向每个调用的函数的标准输出(也就是说,每个调用都会覆盖文件的内容;每次调用该函数时都使用'>>“$ results”'附加到文件中)。 – chepner 2014-09-11 12:57:11

+0

@chepner - WOW - 这对我来说是新的。去阅读它。 THANX! ;) – jm666 2014-09-11 12:59:33