diff --git a/README.md b/README.md
index a8134be..9d471b0 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@

-[](https://github.com/duke-git/lancet/releases)
+[](https://github.com/duke-git/lancet/releases)
[](https://pkg.go.dev/github.com/duke-git/lancet/v2)
[](https://goreportcard.com/report/github.com/duke-git/lancet/v2)
[](https://github.com/duke-git/lancet/actions/workflows/codecov.yml)
diff --git a/README_zh-CN.md b/README_zh-CN.md
index a890e93..0a53bca 100644
--- a/README_zh-CN.md
+++ b/README_zh-CN.md
@@ -4,7 +4,7 @@

-[](https://github.com/duke-git/lancet/releases)
+[](https://github.com/duke-git/lancet/releases)
[](https://pkg.go.dev/github.com/duke-git/lancet/v2)
[](https://goreportcard.com/report/github.com/duke-git/lancet/v2)
[](https://github.com/duke-git/lancet/actions/workflows/codecov.yml)
diff --git a/system/os.go b/system/os.go
index 55ac2e9..2924b33 100644
--- a/system/os.go
+++ b/system/os.go
@@ -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
diff --git a/system/os_linux.go b/system/os_linux.go
new file mode 100644
index 0000000..ce6bfbe
--- /dev/null
+++ b/system/os_linux.go
@@ -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
+ }
+ }
+}
diff --git a/system/os_windows.go b/system/os_windows.go
new file mode 100644
index 0000000..db38238
--- /dev/null
+++ b/system/os_windows.go
@@ -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
+ }
+ }
+}