1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-07 06:02:27 +08:00

Merge branch 'main' into v2

This commit is contained in:
dudaodong
2023-04-17 15:28:37 +08:00
5 changed files with 49 additions and 3 deletions

View File

@@ -4,7 +4,7 @@
<br/>
![Go version](https://img.shields.io/badge/go-%3E%3Dv1.18-9cf)
[![Release](https://img.shields.io/badge/release-2.1.18-green.svg)](https://github.com/duke-git/lancet/releases)
[![Release](https://img.shields.io/badge/release-2.1.19-green.svg)](https://github.com/duke-git/lancet/releases)
[![GoDoc](https://godoc.org/github.com/duke-git/lancet/v2?status.svg)](https://pkg.go.dev/github.com/duke-git/lancet/v2)
[![Go Report Card](https://goreportcard.com/badge/github.com/duke-git/lancet/v2)](https://goreportcard.com/report/github.com/duke-git/lancet/v2)
[![test](https://github.com/duke-git/lancet/actions/workflows/codecov.yml/badge.svg?branch=main&event=push)](https://github.com/duke-git/lancet/actions/workflows/codecov.yml)

View File

@@ -4,7 +4,7 @@
<br/>
![Go version](https://img.shields.io/badge/go-%3E%3Dv1.18-9cf)
[![Release](https://img.shields.io/badge/release-2.1.18-green.svg)](https://github.com/duke-git/lancet/releases)
[![Release](https://img.shields.io/badge/release-2.1.19-green.svg)](https://github.com/duke-git/lancet/releases)
[![GoDoc](https://godoc.org/github.com/duke-git/lancet/v2?status.svg)](https://pkg.go.dev/github.com/duke-git/lancet/v2)
[![Go Report Card](https://goreportcard.com/badge/github.com/duke-git/lancet/v2)](https://goreportcard.com/report/github.com/duke-git/lancet/v2)
[![test](https://github.com/duke-git/lancet/actions/workflows/codecov.yml/badge.svg?branch=main&event=push)](https://github.com/duke-git/lancet/actions/workflows/codecov.yml)

View File

@@ -15,6 +15,10 @@ import (
"golang.org/x/text/encoding/simplifiedchinese"
)
type (
Option func(*exec.Cmd)
)
// IsWindows check if current os is windows.
// Play: https://go.dev/play/p/XzJULbzmf9m
func IsWindows() bool {
@@ -66,7 +70,7 @@ func CompareOsEnv(key, comparedEnv string) bool {
// in linux, use /bin/bash -c to execute command
// in windows, use powershell.exe to execute command
// Play: https://go.dev/play/p/n-2fLyZef-4
func ExecCommand(command string) (stdout, stderr string, err error) {
func ExecCommand(command string, opts ...Option) (stdout, stderr string, err error) {
var out bytes.Buffer
var errOut bytes.Buffer
@@ -74,6 +78,12 @@ func ExecCommand(command string) (stdout, stderr string, err error) {
if IsWindows() {
cmd = exec.Command("powershell.exe", command)
}
for _, opt := range opts {
if opt != nil {
opt(cmd)
}
}
cmd.Stdout = &out
cmd.Stderr = &errOut

18
system/os_linux.go Normal file
View File

@@ -0,0 +1,18 @@
package system
import (
"os/exec"
"syscall"
)
func WithForeground() Option {
return func(c *exec.Cmd) {
if c.SysProcAttr == nil {
c.SysProcAttr = &syscall.SysProcAttr{
Foreground: true,
}
} else {
c.SysProcAttr.Foreground = true
}
}
}

18
system/os_windows.go Normal file
View File

@@ -0,0 +1,18 @@
package system
import (
"os/exec"
"syscall"
)
func WithWinHide() Option {
return func(c *exec.Cmd) {
if c.SysProcAttr == nil {
c.SysProcAttr = &syscall.SysProcAttr{
HideWindow: true,
}
} else {
c.SysProcAttr.HideWindow = true
}
}
}