7 Commits
v1.5 ... v1.8

Author SHA1 Message Date
eleksir
8f2afa0441 Fix font size checks and fallbacks 2025-07-12 13:43:10 +03:00
eleksir
8fa1c6d596 Allow to override (in config) color and font settings for AppButtons block 2025-07-12 12:41:13 +03:00
eleksir
12f4dc75f0 Fix linter warnings 2025-06-24 16:13:36 +03:00
eleksir
913fcc34ee Fix incorrect display measurement units in swap calculation in mem plugin 2025-06-24 16:12:48 +03:00
eleksir
ac856f4174 Fix empty font name and incorrect font size name in VPN plugin output 2025-06-24 16:11:43 +03:00
eleksir
a5d793926b Fix typo in README.md 2025-06-01 18:59:15 +03:00
eleksir
40a94bd001 Add missing runcommand.go 2025-06-01 18:57:47 +03:00
6 changed files with 405 additions and 33 deletions

View File

@@ -18,7 +18,7 @@ It is i3bar text generator.
## How to build it ## How to build it
This appliction was tested to compile with go v1.24. This application was tested to compile with go v1.24.
All you need is go lang compiler and gnu make utility. Invoke All you need is go lang compiler and gnu make utility. Invoke

View File

@@ -29,7 +29,7 @@ func (c *MyConfig) UpdateBatteryInfo() {
} }
var ( var (
batteries []*battery.Battery = []*battery.Battery{} batteries = []*battery.Battery{}
Batts string Batts string
ch int ch int
status string status string
@@ -52,6 +52,7 @@ func (c *MyConfig) UpdateBatteryInfo() {
if err != nil { if err != nil {
log.Printf("Unable to read file %s: %s", file, err) log.Printf("Unable to read file %s: %s", file, err)
continue continue
} }
@@ -65,6 +66,7 @@ func (c *MyConfig) UpdateBatteryInfo() {
if err != nil { if err != nil {
log.Printf("Unable to read file %s: %s", statusFile, err) log.Printf("Unable to read file %s: %s", statusFile, err)
continue continue
} }
@@ -91,6 +93,7 @@ func (c *MyConfig) UpdateBatteryInfo() {
if err != nil { if err != nil {
log.Printf("Unable to convert string from file %s to integer", file) log.Printf("Unable to convert string from file %s to integer", file)
continue continue
} }
@@ -100,9 +103,9 @@ func (c *MyConfig) UpdateBatteryInfo() {
} }
} }
} else { } else {
batteries, _ = battery.GetAll()
// In theory, this module should give for each entry its separate err, but in practice it gives // In theory, this module should give for each entry its separate err, but in practice it gives
// one single err for all entries, so we cannot detemine whist exatly entry errored. // one single err for all entries, so we cannot detemine whist exatly entry errored.
batteries, _ = battery.GetAll()
} }
var ( var (

View File

@@ -246,6 +246,10 @@ type MyConfig struct {
AppButtons struct { AppButtons struct {
Enabled bool `json:"enabled,omitempty"` Enabled bool `json:"enabled,omitempty"`
Color string `json:"color,omitempty"`
Background string `json:"background,omitempty"`
Font string `json:"font,omitempty"`
FontSize string `json:"font_size,omitempty"`
Separator Separator `json:"separator,omitempty"` Separator Separator `json:"separator,omitempty"`
} `json:"app_buttons,omitempty"` } `json:"app_buttons,omitempty"`
@@ -258,6 +262,8 @@ type MyConfig struct {
Class string `json:"class,omitempty"` Class string `json:"class,omitempty"`
Color string `json:"color,omitempty"` Color string `json:"color,omitempty"`
Background string `json:"background,omitempty"` Background string `json:"background,omitempty"`
Font string `json:"font,omitempty"`
FontSize string `json:"font_size,omitempty"`
Border string `json:"border,omitempty"` Border string `json:"border,omitempty"`
BorderActive string `json:"border_active,omitempty"` BorderActive string `json:"border_active,omitempty"`
Separator bool `json:"separator,omitempty"` Separator bool `json:"separator,omitempty"`
@@ -464,6 +470,30 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
if sampleConfig.LA.FontSize == "" { if sampleConfig.LA.FontSize == "" {
sampleConfig.LA.FontSize = sampleConfig.FontSize sampleConfig.LA.FontSize = sampleConfig.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.LA.FontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.LA.FontSize: %s, fallback to %s",
err,
sampleConfig.FontSize,
)
sampleConfig.LA.FontSize = sampleConfig.FontSize
}
if !matched {
log.Printf(
"Unable to set sampleConfig.LA.FontSize, fallback to %s",
sampleConfig.FontSize,
)
sampleConfig.LA.FontSize = sampleConfig.FontSize
}
} }
if sampleConfig.LA.Separator.Left.Color == "" { if sampleConfig.LA.Separator.Left.Color == "" {
@@ -518,22 +548,6 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
sampleConfig.LA.Separator.Right.Background = sampleConfig.Separator.Right.Background sampleConfig.LA.Separator.Right.Background = sampleConfig.Separator.Right.Background
} }
if sampleConfig.LA.Separator.Right.Font == "" {
sampleConfig.LA.Separator.Right.Font = sampleConfig.Separator.Right.Font
}
if sampleConfig.LA.Separator.Right.FontSize == "" {
sampleConfig.LA.Separator.Right.FontSize = sampleConfig.Separator.Right.FontSize
}
if sampleConfig.LA.Separator.Right.Color == "" {
sampleConfig.LA.Separator.Right.Color = sampleConfig.Separator.Right.Color
}
if sampleConfig.LA.Separator.Right.Background == "" {
sampleConfig.LA.Separator.Right.Background = sampleConfig.Separator.Right.Background
}
if sampleConfig.LA.Separator.Right.Symbol == "" { if sampleConfig.LA.Separator.Right.Symbol == "" {
sampleConfig.LA.Separator.Right.Symbol = sampleConfig.Separator.Right.Symbol sampleConfig.LA.Separator.Right.Symbol = sampleConfig.Separator.Right.Symbol
} }
@@ -584,6 +598,30 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
if sampleConfig.Mem.FontSize == "" { if sampleConfig.Mem.FontSize == "" {
sampleConfig.Mem.FontSize = sampleConfig.FontSize sampleConfig.Mem.FontSize = sampleConfig.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.Mem.FontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.Mem.FontSize: %s, fallback to %s",
err,
sampleConfig.FontSize,
)
sampleConfig.Mem.FontSize = sampleConfig.FontSize
}
if !matched {
log.Printf(
"Unable to set sampleConfig.Mem.FontSize, fallback to %s",
sampleConfig.FontSize,
)
sampleConfig.Mem.FontSize = sampleConfig.FontSize
}
} }
if sampleConfig.Mem.Separator.Left.Color == "" { if sampleConfig.Mem.Separator.Left.Color == "" {
@@ -688,6 +726,30 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
if sampleConfig.Clock.FontSize == "" { if sampleConfig.Clock.FontSize == "" {
sampleConfig.Clock.FontSize = sampleConfig.FontSize sampleConfig.Clock.FontSize = sampleConfig.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.Clock.FontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.Clock.FontSize: %s, fallback to %s",
err,
sampleConfig.FontSize,
)
sampleConfig.Clock.FontSize = sampleConfig.FontSize
}
if !matched {
log.Printf(
"Unable to set sampleConfig.Clock.FontSize, fallback to %s",
sampleConfig.FontSize,
)
sampleConfig.Clock.FontSize = sampleConfig.FontSize
}
} }
if sampleConfig.Clock.Separator.Left.Enabled { if sampleConfig.Clock.Separator.Left.Enabled {
@@ -816,6 +878,30 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
if sampleConfig.Battery.FontSize == "" { if sampleConfig.Battery.FontSize == "" {
sampleConfig.Battery.FontSize = sampleConfig.FontSize sampleConfig.Battery.FontSize = sampleConfig.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.Battery.FontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.Battery.FontSize: %s, fallback to %s",
err,
sampleConfig.FontSize,
)
sampleConfig.Battery.FontSize = sampleConfig.FontSize
}
if !matched {
log.Printf(
"Unable to set sampleConfig.Battery.FontSize, fallback to %s",
sampleConfig.FontSize,
)
sampleConfig.Battery.FontSize = sampleConfig.FontSize
}
} }
if sampleConfig.Battery.Symbol == "" { if sampleConfig.Battery.Symbol == "" {
@@ -828,6 +914,30 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
if sampleConfig.Battery.SymbolFontSize == "" { if sampleConfig.Battery.SymbolFontSize == "" {
sampleConfig.Battery.SymbolFontSize = sampleConfig.Battery.FontSize sampleConfig.Battery.SymbolFontSize = sampleConfig.Battery.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.Battery.SymbolFontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.Battery.SymbolFontSize: %s, fallback to %s",
err,
sampleConfig.Battery.FontSize,
)
sampleConfig.Battery.SymbolFontSize = sampleConfig.Battery.FontSize
}
if !matched {
log.Printf(
"Unable to set sampleConfig.Battery.SymbolFontSize, fallback to %s",
sampleConfig.Battery.FontSize,
)
sampleConfig.Battery.SymbolFontSize = sampleConfig.Battery.FontSize
}
} }
// sampleConfig.Battery.ChargeColor.Full will be empty string if not set // sampleConfig.Battery.ChargeColor.Full will be empty string if not set
@@ -943,6 +1053,30 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
if sampleConfig.CPUTemp.FontSize == "" { if sampleConfig.CPUTemp.FontSize == "" {
sampleConfig.CPUTemp.FontSize = sampleConfig.FontSize sampleConfig.CPUTemp.FontSize = sampleConfig.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.CPUTemp.FontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.CPUTemp.FontSize: %s, fallback to %s",
err,
sampleConfig.FontSize,
)
sampleConfig.CPUTemp.FontSize = sampleConfig.FontSize
}
if !matched {
log.Printf(
"Unable to set sampleConfig.CPUTemp.FontSize, fallback to %s",
sampleConfig.FontSize,
)
sampleConfig.CPUTemp.FontSize = sampleConfig.FontSize
}
} }
if sampleConfig.CPUTemp.Separator.Left.Enabled { if sampleConfig.CPUTemp.Separator.Left.Enabled {
@@ -1049,11 +1183,35 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
} }
if sampleConfig.Vpn.Font == "" { if sampleConfig.Vpn.Font == "" {
sampleConfig.Vpn.FontSize = sampleConfig.Font sampleConfig.Vpn.Font = sampleConfig.Font
} }
if sampleConfig.Vpn.FontSize == "" { if sampleConfig.Vpn.FontSize == "" {
sampleConfig.Vpn.FontSize = sampleConfig.FontSize sampleConfig.Vpn.FontSize = sampleConfig.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.Vpn.FontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.Vpn.FontSize: %s, fallback to %s",
err,
sampleConfig.FontSize,
)
sampleConfig.Vpn.FontSize = sampleConfig.FontSize
}
if !matched {
log.Printf(
"Unable to set sampleConfig.Vpn.FontSize, fallback to %s",
sampleConfig.FontSize,
)
sampleConfig.Vpn.FontSize = sampleConfig.FontSize
}
} }
// Check status file at least once per 3 seconds // Check status file at least once per 3 seconds
@@ -1198,6 +1356,30 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
if sampleConfig.SimpleVolumePa.FontSize == "" { if sampleConfig.SimpleVolumePa.FontSize == "" {
sampleConfig.SimpleVolumePa.FontSize = sampleConfig.FontSize sampleConfig.SimpleVolumePa.FontSize = sampleConfig.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.SimpleVolumePa.FontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.SimpleVolumePa.FontSize: %s, fallback to %s",
err,
sampleConfig.FontSize,
)
sampleConfig.SimpleVolumePa.FontSize = sampleConfig.FontSize
}
if !matched {
log.Printf(
"Unable to set sampleConfig.SimpleVolumePa.FontSize, fallback to %s",
sampleConfig.FontSize,
)
sampleConfig.SimpleVolumePa.FontSize = sampleConfig.FontSize
}
} }
if sampleConfig.SimpleVolumePa.Symbol == "" { if sampleConfig.SimpleVolumePa.Symbol == "" {
@@ -1210,6 +1392,30 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
if sampleConfig.SimpleVolumePa.SymbolFontSize == "" { if sampleConfig.SimpleVolumePa.SymbolFontSize == "" {
sampleConfig.SimpleVolumePa.SymbolFontSize = sampleConfig.SimpleVolumePa.FontSize sampleConfig.SimpleVolumePa.SymbolFontSize = sampleConfig.SimpleVolumePa.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.SimpleVolumePa.SymbolFontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.SimpleVolumePa.SymbolFontSize: %s, fallback to %s",
err,
sampleConfig.SimpleVolumePa.FontSize,
)
sampleConfig.SimpleVolumePa.SymbolFontSize = sampleConfig.SimpleVolumePa.FontSize
}
if !matched {
log.Printf(
"Unable to set sampleConfig.SimpleVolumePa.SymbolFontSize, fallback to %s",
sampleConfig.SimpleVolumePa.FontSize,
)
sampleConfig.SimpleVolumePa.SymbolFontSize = sampleConfig.SimpleVolumePa.FontSize
}
} }
if sampleConfig.SimpleVolumePa.Step == 0 { if sampleConfig.SimpleVolumePa.Step == 0 {
@@ -1370,6 +1576,29 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
if sampleConfig.NetIf.FontSize == "" { if sampleConfig.NetIf.FontSize == "" {
sampleConfig.NetIf.FontSize = sampleConfig.FontSize sampleConfig.NetIf.FontSize = sampleConfig.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.NetIf.FontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.NetIf.FontSize: %s, fallback to %s",
err,
sampleConfig.FontSize,
)
sampleConfig.NetIf.FontSize = sampleConfig.FontSize
}
if !matched {
log.Printf("Unable to set sampleConfig.NetIf.FontSize, fallback to %s",
sampleConfig.FontSize,
)
sampleConfig.NetIf.FontSize = sampleConfig.FontSize
}
} }
if sampleConfig.NetIf.Separator.Left.Color == "" { if sampleConfig.NetIf.Separator.Left.Color == "" {
@@ -1463,6 +1692,7 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
if sampleConfig.CmdRun.Cmd == "" && sampleConfig.CmdRun.Enabled { if sampleConfig.CmdRun.Cmd == "" && sampleConfig.CmdRun.Enabled {
sampleConfig.CmdRun.Enabled = false sampleConfig.CmdRun.Enabled = false
log.Print( log.Print(
"Setting sampleConfig.CmdRun.Enabled to false because sampleConfig.CmdRun.Cmd is not set", "Setting sampleConfig.CmdRun.Enabled to false because sampleConfig.CmdRun.Cmd is not set",
) )
@@ -1484,6 +1714,30 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
if sampleConfig.CmdRun.FontSize == "" { if sampleConfig.CmdRun.FontSize == "" {
sampleConfig.CmdRun.FontSize = sampleConfig.FontSize sampleConfig.CmdRun.FontSize = sampleConfig.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.CmdRun.FontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.CmdRun.FontSize: %s, fallback to %s",
err,
sampleConfig.FontSize,
)
sampleConfig.CmdRun.FontSize = sampleConfig.FontSize
}
if !matched {
log.Printf(
"Unable to set sampleConfig.CmdRun.FontSize, fallback to %s",
sampleConfig.FontSize,
)
sampleConfig.CmdRun.FontSize = sampleConfig.FontSize
}
} }
if sampleConfig.CmdRun.Separator.Left.Color == "" { if sampleConfig.CmdRun.Separator.Left.Color == "" {
@@ -1575,6 +1829,45 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
} }
// sampleConfig.AppButtons.Enabled will false if not set in config // sampleConfig.AppButtons.Enabled will false if not set in config
if sampleConfig.AppButtons.Color == "" {
sampleConfig.AppButtons.Color = sampleConfig.Color
}
if sampleConfig.AppButtons.Background == "" {
sampleConfig.AppButtons.Background = sampleConfig.Background
}
if sampleConfig.AppButtons.Font == "" {
sampleConfig.AppButtons.Font = sampleConfig.Font
}
if sampleConfig.AppButtons.FontSize == "" {
sampleConfig.AppButtons.FontSize = sampleConfig.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
sampleConfig.AppButtons.FontSize,
)
if err != nil {
log.Printf(
"Unable to set sampleConfig.AppButtons.FontSize: %s, fallback to %s",
err,
sampleConfig.FontSize,
)
sampleConfig.AppButtons.FontSize = sampleConfig.FontSize
}
if !matched {
log.Printf(
"Unable to set sampleConfig.AppButtons.FontSize, fallback to %s",
sampleConfig.FontSize,
)
sampleConfig.AppButtons.FontSize = sampleConfig.FontSize
}
}
if sampleConfig.AppButtons.Separator.Left.Color == "" { if sampleConfig.AppButtons.Separator.Left.Color == "" {
sampleConfig.AppButtons.Separator.Left.Color = sampleConfig.Separator.Left.Color sampleConfig.AppButtons.Separator.Left.Color = sampleConfig.Separator.Left.Color
@@ -1675,23 +1968,57 @@ func ReadConf(defaultConfig []byte) (*MyConfig, error) {
// app.Args can be empty slice. In that case command will be run without aruments. // app.Args can be empty slice. In that case command will be run without aruments.
if app.Cmd == "" { if app.Cmd == "" {
// If command omitted it will be just /usr/bin/true.
app.Cmd = "true" app.Cmd = "true"
} }
if app.Color == "" { if app.Color == "" {
app.Color = sampleConfig.Color app.Color = sampleConfig.AppButtons.Color
} }
if app.Background == "" { if app.Background == "" {
app.Background = sampleConfig.Background app.Background = sampleConfig.AppButtons.Background
}
if app.Font == "" {
app.Font = sampleConfig.AppButtons.Font
}
if app.FontSize == "" {
app.FontSize = sampleConfig.AppButtons.FontSize
} else {
matched, err := regexp.MatchString(
`^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger)$`,
app.FontSize,
)
if err != nil {
log.Printf(
"Unable to set %s.FontSize: %s, fallback to %s",
app.Name,
err,
sampleConfig.AppButtons.FontSize,
)
app.FontSize = sampleConfig.AppButtons.FontSize
}
if !matched {
log.Printf("Unable to set %s.FontSize, fallback to %s",
app.Name,
sampleConfig.AppButtons.FontSize,
)
app.FontSize = sampleConfig.AppButtons.FontSize
}
} }
if app.Border == "" { if app.Border == "" {
app.Border = sampleConfig.Color app.Border = sampleConfig.AppButtons.Color
} }
if app.BorderActive == "" { if app.BorderActive == "" {
app.BorderActive = sampleConfig.Color app.BorderActive = sampleConfig.AppButtons.Color
} }
// app.Separator can be omitted, in that case it is false // app.Separator can be omitted, in that case it is false

View File

@@ -51,7 +51,7 @@ func (c *MyConfig) UpdateMemStats() {
if c.Values.Memory.Usedpct != uint64(v.UsedPercent) || c.Values.Memory.Shared != v.Shared/1024/1024 || c.Values.Memory.Swap != v.SwapTotal-v.SwapFree { if c.Values.Memory.Usedpct != uint64(v.UsedPercent) || c.Values.Memory.Shared != v.Shared/1024/1024 || c.Values.Memory.Swap != v.SwapTotal-v.SwapFree {
c.Values.Memory.Usedpct = uint64(v.UsedPercent) c.Values.Memory.Usedpct = uint64(v.UsedPercent)
c.Values.Memory.Shared = v.Shared / 1024 / 1024 c.Values.Memory.Shared = v.Shared / 1024 / 1024
c.Values.Memory.Swap = sw.Used c.Values.Memory.Swap = sw.Used / 1024 / 1024
c.Channels.UpdateReady <- true c.Channels.UpdateReady <- true
} }
} else { } else {

View File

@@ -0,0 +1,41 @@
package lib
import (
"log"
"time"
)
// RunCommands gets list of commands runs them sequentally and conacatenates their output.
func (c *MyConfig) RunCommand() {
var (
InitialDelay = 100 * time.Millisecond
LoopIterationDelay = time.Duration(c.CmdRun.Delay) * time.Second
Delay = InitialDelay
ticker = time.NewTicker(Delay)
)
for range ticker.C {
if Delay == InitialDelay {
Delay = LoopIterationDelay
ticker.Reset(Delay)
}
var (
outputString string
command = []string{c.CmdRun.Cmd}
)
if len(c.CmdRun.Args) > 0 {
command = append(command, c.CmdRun.Args...)
}
outputString += RunProcess(command)
log.Println(c.Values.RunCommandOutput)
if c.Values.RunCommandOutput != outputString {
c.Values.RunCommandOutput = outputString
c.Channels.UpdateReady <- true
}
}
}

View File

@@ -14,6 +14,7 @@ import (
func (c *MyConfig) Spawner() { func (c *MyConfig) Spawner() {
for prg := range c.Channels.RunChan { for prg := range c.Channels.RunChan {
<-time.After(25 * time.Millisecond) <-time.After(25 * time.Millisecond)
devnullR, _ := os.Open(os.DevNull) devnullR, _ := os.Open(os.DevNull)
devnullW, _ := os.OpenFile(os.DevNull, os.O_WRONLY|os.O_APPEND, 0644) devnullW, _ := os.OpenFile(os.DevNull, os.O_WRONLY|os.O_APPEND, 0644)
@@ -68,9 +69,9 @@ func RunProcess(command []string) string {
switch len(command) { switch len(command) {
case 1: case 1:
cmd = exec.Command(command[0], "") cmd = exec.Command(command[0], "") //nolint: gosec
default: default:
cmd = exec.Command(command[0], command[1:]...) cmd = exec.Command(command[0], command[1:]...) //nolint: gosec
} }
cmd.Dir = "/" cmd.Dir = "/"
@@ -87,11 +88,11 @@ func RunProcess(command []string) string {
} }
return "" return ""
} else { }
if stderr.String() != "" { if stderr.String() != "" {
log.Printf("%s: %s", strings.Join(command, " "), stderr.String()) log.Printf("%s: %s", strings.Join(command, " "), stderr.String())
} }
}
return strings.TrimRight(stdout.String(), "\n") return strings.TrimRight(stdout.String(), "\n")
} }