Linux Bash脚本-将输出保存到文件的函数

Linux Bash脚本-将输出保存到文件的函数,linux,bash,Linux,Bash,我试图将集合的所有输出保存到单独的文件中。例如,一个函数类似于: function kernel_info(){ echo "Kernel version: $(uname -v)" } 我想把这个输出写入一个名为kernel_info的文件。 类似地,我将创建其他函数来收集主机名等其他信息。 如何编写一个函数,每次我想将信息保存到磁盘上的文件时都可以调用该函数? 谢谢使用tee kernel_info () { { printf 'Kernel version: ' u

我试图将集合的所有输出保存到单独的文件中。例如,一个函数类似于:

function kernel_info(){
   echo "Kernel version: $(uname -v)"
}
我想把这个输出写入一个名为kernel_info的文件。 类似地,我将创建其他函数来收集主机名等其他信息。 如何编写一个函数,每次我想将信息保存到磁盘上的文件时都可以调用该函数? 谢谢

使用
tee

kernel_info () {
   { printf 'Kernel version: '
     uname -v
   } | tee -a /path/to/kernel_info
}
此函数将
printf
uname
的组合输出写入给定文件,并继续将其写入标准输出

-a
选项使
tee
附加到文件中

如果要参数化函数,可以

kernel_info () {
   local fname
   fname=${1:-/default/path/to/kernel_info}
   { printf 'Kernel version: '
     uname -v
   } | tee -a "$fname"
}

kernel_info  # Writes to /default/path/to/kernel_info
kernel_info /var/log/kernel_info  # Write to an alternate file

您可以通过阅读自动命名,而且非常简单

... | tee "${FUNCNAME}.log"

在要登录到指定输出文件的函数中。

定义要循环的函数列表,然后调用它们,然后将结果重定向到文件中

替换,
>
附加

#!/bin/bash

function local_hostname() {
    echo "Hostname: $(hostname)"
}

function kernel_info() {
    echo "Kernel version: $(uname -v)"
}

function write_to_file() {
    > file.txt

    funcs=(
        local_hostname
        kernel_info
    )
    for func in ${funcs[*]}
    do
       $func >> file.txt
    done
}

write_to_file

你可以保持简单

$: tst() { date ; } >>log
$: ls -l log
ls: cannot access 'log': No such file or directory
$: tst
$: cat log
Wed, Jun 17, 2020  8:12:10 AM
$: tst
$: cat log
Wed, Jun 17, 2020  8:12:10 AM
Wed, Jun 17, 2020  8:12:17 AM

第二个泄漏
fname
,不应该是
local
?它可以是。我通常不会太担心此类泄漏,因此我不会立即使用
local
local
)作为答案中唯一非POSIX部分的“区别”)。tee函数运行良好。我试图在同一时间拉链,但不能|tee“$directory\u name”“\u${FUNCNAME}.txt”>/dev/null如何将tee与上述行中的tar结合使用?