BASH - записать вывод функции в файл - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть ситуация, когда у меня есть файл. sh, полный функций. Каждая из функций имеет эхо в них, выводя их на консоль.

#!/bin/bash

getLogTimestamp() {
    echo TimeStamp:  $(date +%Y-%m-%dT%H:%M:%S.130Z)
}

getDisplayName(){
echo Device  Name: $(awk -F'=' '/^CARBON_LITE_PLAYER_ID=.*/ { print $2;}' /home/benja/app/.env)
}

getDeviceIPAddress(){
echo Device IP Address: $(hostname -i)
}

getSystemUptime(){
echo System UpTime: $(uptime)
}

getDateTimeInfo(){
echo Time Sync Status: "$(timedatectl status | awk '/Warning/{exit} 1')"
}

getMemoryInfo() {
    arr=( $(free -h) )
    keys=("${arr[@]::8}")
    vals=("${arr[@]:8:12}")
    for i in ${!keys[@]}; { printf -v data[i] "%s: %s, " "${keys[i]}" "${vals[i]}"; }
    data="${data[@]}"
    echo Memory:  ${data%,*}
}

getDiskInfo()
{
  arr=($(df -h))
    keys=("${arr[@]::6}")
    vals=("${arr[@]:7:100}")
    for i in ${!keys[@]}; { printf -v data[i] "%s: %s, " "${keys[i]}" "${vals[i]}"; }
    data="${data[@]}"
    echo Disk:  ${data%,*}

}

getDisplayState(){
    STATE=$(/opt/vc/bin/tvservice -s | awk '/state/  {print $2}')
    if STATE=0x40001
        then
            echo Display State: VC_SDTV_NTSC, VC_HDMI_UNPLUGGED
            exit

    elif STATE=0x40002
        then
            echo Display State: VC_SDTV_NTSC, VC_HDMI_ATTACHED
            exit
    elif STATE=0x120002
        then
            echo Display State: VC_SDTV_ATTACHED, VC_SDTV_CP_INACTIVE, VC_HDMI_ATTACHED
            exit
    elif STATE=0x120005
        then
            echo Display State: VC_SDTV_ATTACHED, VC_SDTV_CP_INACTIVE, VC_HDMI_UNPLUGGED, VC_HDMI_DVI
    elif STATE=0x120016
        then
            echo Display State: VC_SDTV_ATTACHED, VC_SDTV_CP_INACTIVE, VC_HDMI_ATTACHED, VC_HDMI_DVI, VC_HDMI_HDCP_UNAUTH
            exit
    elif STATE=0x12001a
        then
            echo Display State: VC_SDTV_ATTACHED, VC_SDTV_CP_INACTIVE, VC_HDMI_ATTACHED, VC_HDMI_HDMI, VC_HDMI_HDCP_UNAUTH
            exit
    elif STATE=0x12001a
        then
            echo Display State: VC_SDTV_ATTACHED, VC_SDTV_CP_INACTIVE, VC_HDMI_ATTACHED, VC_HDMI_HDMI
            exit
    elif STATE=0x120009
        then
            echo  Display State: VC_SDTV_ATTACHED, VC_SDTV_CP_INACTIVE, VC_HDMI_UNPLUGGED, VC_HDMI_HDMI
            exit
    fi
}

У меня есть второй файл. sh (в который я импортировал файл функции, и я могу вызвать функции, и они эхо на экран просто отлично.

Моя проблема в том, что я не могу записать вывод функции в файл:

. /home/benja/app/scripts/log-helper-functions.sh

# RSH -We are logging this data every time this script runs
echo ---------------------------------- >>/home/benja/app/logs/carbonlite-guardian.log

getDisplayName >>/home/benja/app/logs/carbonlite-guardian.log

getDeviceIPAddress >>/home/benja/app/logs/carbonlite-guardian.log

getLogTimestamp >>/home/benja/app/logs/carbonlite-guardian.log

getSystemUptime >>/home/benja/app/logs/carbonlite-guardian.log

getDateTimeInfo >>/home/benja/app/logs/carbonlite-guardian.log

getMemoryInfo >>/home/benja/app/logs/carbonlite-guardian.log

getDiskInfo >>/home/benja/app/logs/carbonlite-guardian.log

getDisplayStaten >>/home/benja/app/logs/carbonlite-guardian.log
echo ---------------------------------- >>/home/benja/app/logs/carbonlite-guardian.log
# RSH end

Я не хочу жестко кодировать функции для записи в файл, поскольку они предназначены для многократного использования, так как я могу go о записи в файл в этом случае?

TIA, Ron

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