add system utils
This commit is contained in:
parent
4e5d76af37
commit
68842a39b8
69
pkg/system/os.go
Normal file
69
pkg/system/os.go
Normal file
@ -0,0 +1,69 @@
|
||||
// Package system 包含一些关于操作系统、运行时间、shell命令的功能
|
||||
package system
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"os"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
// IsWindows 检查当前操作系统是否为Windows
|
||||
func IsWindows() bool {
|
||||
return runtime.GOOS == "windows"
|
||||
}
|
||||
|
||||
// IsLinux 检查当前操作系统是否为Linux
|
||||
func IsLinux() bool {
|
||||
return runtime.GOOS == "linux"
|
||||
}
|
||||
|
||||
// IsMac 检查当前操作系统是否为Macos
|
||||
func IsMac() bool {
|
||||
return runtime.GOOS == "darwin"
|
||||
}
|
||||
|
||||
// GetOsEnv 获取由键命名的环境变量的值
|
||||
func GetOsEnv(key string) string {
|
||||
return os.Getenv(key)
|
||||
}
|
||||
|
||||
// SetOsEnv 设置由键命名的环境变量的值
|
||||
func SetOsEnv(key, value string) error {
|
||||
return os.Setenv(key, value)
|
||||
}
|
||||
|
||||
// RemoveOsEnv 删除一个环境变量
|
||||
func RemoveOsEnv(key string) error {
|
||||
return os.Unsetenv(key)
|
||||
}
|
||||
|
||||
// CompareOsEnv 获取由键值命名的环境,并将其与compareEnv进行比较
|
||||
func CompareOsEnv(key, comparedEnv string) bool {
|
||||
env := GetOsEnv(key)
|
||||
if env == "" {
|
||||
return false
|
||||
}
|
||||
return env == comparedEnv
|
||||
}
|
||||
|
||||
// ExecCommand 使用shell /bin/bash -c来执行命令
|
||||
func ExecCommand(command string) (stdout, stderr string, err error) {
|
||||
var out bytes.Buffer
|
||||
var errout bytes.Buffer
|
||||
|
||||
cmd := exec.Command("/bin/bash", "-c", command)
|
||||
if IsWindows() {
|
||||
cmd = exec.Command("cmd")
|
||||
}
|
||||
cmd.Stdout = &out
|
||||
cmd.Stderr = &errout
|
||||
err = cmd.Run()
|
||||
|
||||
if err != nil {
|
||||
stderr = string(errout.Bytes())
|
||||
}
|
||||
stdout = string(out.Bytes())
|
||||
|
||||
return
|
||||
}
|
||||
56
pkg/system/os_test.go
Normal file
56
pkg/system/os_test.go
Normal file
@ -0,0 +1,56 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestOsDetection(t *testing.T) {
|
||||
osType, _, _ := ExecCommand("echo $OSTYPE")
|
||||
if strings.Index(osType, "linux") != -1 {
|
||||
require.Equal(t, true, IsLinux())
|
||||
}
|
||||
if strings.Index(osType, "darwin") != -1 {
|
||||
require.Equal(t, true, IsMac())
|
||||
}
|
||||
}
|
||||
|
||||
func TestOsEnvOperation(t *testing.T) {
|
||||
envNotExist := GetOsEnv("foo")
|
||||
require.Equal(t, "", envNotExist)
|
||||
|
||||
SetOsEnv("foo", "foo_value")
|
||||
envExist := GetOsEnv("foo")
|
||||
require.Equal(t, "foo_value", envExist)
|
||||
|
||||
require.Equal(t, true, CompareOsEnv("foo", "foo_value"))
|
||||
require.Equal(t, false, CompareOsEnv("foo", "abc"))
|
||||
require.Equal(t, false, CompareOsEnv("abc", "abc"))
|
||||
require.Equal(t, false, CompareOsEnv("abc", "abc"))
|
||||
|
||||
err := RemoveOsEnv("foo")
|
||||
if err != nil {
|
||||
t.Fail()
|
||||
}
|
||||
require.Equal(t, false, CompareOsEnv("foo", "foo_value"))
|
||||
}
|
||||
|
||||
func TestExecCommand(t *testing.T) {
|
||||
out, errout, err := ExecCommand("ls")
|
||||
t.Log("std out: ", out)
|
||||
t.Log("std err: ", errout)
|
||||
require.Nil(t, err)
|
||||
|
||||
out, errout, err = ExecCommand("abc")
|
||||
t.Log("std out: ", out)
|
||||
t.Log("std err: ", errout)
|
||||
if err != nil {
|
||||
t.Logf("error: %v\n", err)
|
||||
}
|
||||
|
||||
if !IsWindows() {
|
||||
require.NotNil(t, err)
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user