Bash скрипт - функция сохранения вывода в файл - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь сохранить весь вывод коллекции в отдельные файлы. Например, одна функция будет выглядеть так:

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

Я хочу записать этот вывод в файл, который будет иметь имя ядра_info. Точно так же я создам другие функции для сбора другой информации, такой как имя хоста и т. Д. c. Как я могу написать функцию, которую я могу вызывать каждый раз, когда хочу сохранить информацию в файл на диске? Спасибо

Ответы [ 4 ]

1 голос
/ 17 июня 2020

Используйте 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
0 голосов
/ 17 июня 2020

Можете не усложнять ...

$: 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
0 голосов
/ 17 июня 2020

Определите список функций для l oop, затем вызовите их, а затем перенаправьте результат в файл,

> заменить, >> добавить

#!/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
0 голосов
/ 17 июня 2020

Вы можете автоматизировать присвоение имен, просматривая Как определить имя функции изнутри функции - и просто

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

внутри функции, в которой вы хотите войти в конкретную -именованный выходной файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...