1. 可接收变参命令

package main
import (
"fmt"
"os"
"os/exec"
"strings"
) func main(){
sliceFunc(os.Args[:]...)
} func sliceFunc(cmd... string){
fmt.Println(cmd)
if len(cmd) == {
fmt.Printf("Usage: %s args...\n", os.Args[])
os.Exit(-)
}
fmt.Println(cmdFunc(cmd...))
} func cmdFunc(cmd... string) string {
fmt.Printf("cmd slice len: %d, value:%v\n", len(cmd), cmd)
result, err := exec.Command(cmd[], cmd[:]...).Output()
if err != nil {
fmt.Println("Command failed:", err.Error())
} // return string(result) // with '\n'
return strings.TrimSpace(string(result))
}

执行结果:

$ go run slice.go uname -a
[uname -a]
cmd slice len: , value:[uname -a]
Linux e531 5.0.--generic #~18.04.-Ubuntu SMP Thu Sep :: UTC x86_64 x86_64 x86_64 GNU/Linux
$ go run slice.go uname
[uname]
cmd slice len: , value:[uname]
Linux

2. Linux和Windows命令

只接收单个命令并执行:

package main

import (
"fmt"
"errors"
"os"
"os/exec"
"runtime"
"strings"
) func main(){
if len(os.Args) == {
fmt.Printf("Usage: %s args...\n", os.Args[])
os.Exit(-)
}
str1, err := RunCommandWithErr(os.Args[])
if err != nil {
fmt.Println(err.Error())
} else {
fmt.Println(str1)
} str := RunCommand(os.Args[])
fmt.Println(str)
} func runInLinux(cmd string) string{
fmt.Println("Running Linux cmd:" , cmd)
result, err := exec.Command("/bin/sh", "-c", cmd).Output()
if err != nil {
fmt.Println(err.Error())
}
return strings.TrimSpace(string(result))
} func runInWindows(cmd string) string{
fmt.Println("Running Win cmd:", cmd)
result, err := exec.Command("cmd", "/c", cmd).Output()
if err != nil {
fmt.Println(err.Error())
}
return strings.TrimSpace(string(result))
} func RunCommand(cmd string) string{
if runtime.GOOS == "windows" {
return runInWindows(cmd)
} else {
return runInLinux(cmd)
}
} func RunLinuxCommand(cmd string) string{
if runtime.GOOS == "windows" {
return ""
} else {
return runInLinux(cmd)
}
} func runInLinuxWithErr(cmd string) (string, error) {
fmt.Println("Running Linux cmd:"+cmd)
result, err := exec.Command("/bin/sh", "-c", cmd).Output()
if err != nil {
fmt.Println(err.Error())
}
return strings.TrimSpace(string(result)), err
} func runInWindowsWithErr(cmd string) (string, error){
fmt.Println("Running Windows cmd:"+cmd)
result, err := exec.Command("cmd", "/c", cmd).Output()
if err != nil {
fmt.Println(err.Error())
}
return strings.TrimSpace(string(result)), err
} func RunCommandWithErr(cmd string) (string, error){
if runtime.GOOS == "windows" {
return runInWindowsWithErr(cmd)
} else {
return runInLinuxWithErr(cmd)
}
} func RunLinuxCommandWithErr(cmd string)(string, error){
if runtime.GOOS == "windows" {
return "", errors.New("could not run in Windows Os")
} else {
return runInLinuxWithErr(cmd)
}
}

执行结果:

$ go run cmd.go uname
Running Linux cmd:uname
Linux
Running Linux cmd: uname
Linux
$ go run cmd.go uname -a
Running Linux cmd:uname
Linux
Running Linux cmd: uname
Linux

参考:

1. golang功能代码

2. Go语言极速入门手册.go

golang执行Linux和Windows命令的更多相关文章

  1. Mac OSX系统、Linux、Windows命令行教程

    目录 Mac OSX系统.Linux.Windows命令行教程 一.各系统终端的使用方法 二.各系统命令的功能 Mac OSX系统.Linux.Windows命令行教程 用你的终端做一些事情 (com ...

  2. mysql命令行的导入导出sql,txt,excel(都在linux或windows命令行操作)(转自筑梦悠然)

    原文链接https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/73805962 Mysql导入导出sql,txt,excel 首先我们通过命令行 ...

  3. 解决python执行linux查看文件命令后,因为^@特殊符号导致部分内容不显示的问题

    问题现象 文件a的内容如下: 查看第3行到第5行的内容:sed -n '3,5p' /tmp/test/a 可见在命令行执行,是没有问题的. 在python中使用paramiko模块执行linux命令 ...

  4. golang执行linux命令

    golang exec 执行系统命令 golang    2014-09-25 13:17:44    2779    0    0 exec.Command() 最简单的方法: cmd := exe ...

  5. Windows 通过批处理自动执行 linux服务器上面命令的办法

    1. 使用putty 下载地址 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 直接使用 exe版本就可以 https:/ ...

  6. linux、WINDOWS命令行下查找和统计行数

    linux : 例子: netstat -an | grep TIME_WAIT | wc -l |  管道符 grep 查找命令 wc 统计命令 windows: 例子: netstat -an | ...

  7. 大技霸教你远程执行Linux脚本和命令

    如果现在需要在 Linux 服务器上执行一系列命令(比如搭建 LNMP 环境)我应该会第一时间想到想办法写个 Shell 脚本,然后扔上去执行以下看看结果. 然而一贯懒惰的我并不想这么去执行 Shel ...

  8. python执行linux的shell命令

    python执行shell脚本常用的方法 import os val=os.system("shell语句")  >>> val=os.system(" ...

  9. linux 远程 windows 命令:rdesktop vs windows mstsc

    [root@bass tmp]# which rdesktop /usr/bin/rdesktop [root@bass tmp]# rpm -qf /usr/bin/rdesktop rdeskto ...

随机推荐

  1. Flutter中极光推送的使用----jpush_flutter

    原文地址:https://www.cnblogs.com/niceyoo/p/11095994.html 1.申请极光账号和建立应用 极光推送的官方网址为:https://www.jiguang.cn ...

  2. promise简单实现

    function isFunction(fn){ return Object.prototype.toString.call(fn) === '[object Function]'; } let ST ...

  3. 【Layui】 layui表单必填项带*样式

    直接上代码 .layui-form-label.layui-required:after{ content:"*"; color:red; position: absolute; ...

  4. iOS - 搜索关键字在结果中高亮显示

    self.labelContent.attributedText = [self highlightText:self.searchStr inStr:searchModel.eventDesc]; ...

  5. mybatis plus 支持达梦DM 数据库啦

    最近由于公司项目需要使用DM数据库,现在就官方源码修改了,完美支持达梦数据库的代码生成器.官方说的v3.0.RELEASE版本支持达梦数据库,不知道说的支持包括支持代码生成器么? 怀着兴奋的心情,兴高 ...

  6. RabbitMQ使用及与spring boot整合

    1.MQ 消息队列(Message Queue,简称MQ)——应用程序和应用程序之间的通信方法 应用:不同进程Process/线程Thread之间通信 比较流行的中间件: ActiveMQ Rabbi ...

  7. spring boot实现切割分片上传

    文件上传是web开发中经常会遇到的 springboot的默认配置为10MB,大于10M的是传不上服务器的,需要修改默认配置 但是如果修改支持大文件又会增加服务器的负担. 当文件大于一定程度时,不仅服 ...

  8. SQL IN 子查询返回多对值

    我们常用的IN 操作是这样的: select * from tab twhere t.col1 in ('value1''value2');12但是如果是多个列的取值来自同一个子查询呢? 我们是不是要 ...

  9. C语言函数返回指针方法

    1.将函数内部定义的变量用static修饰 由于static修饰的变量,分配在静态内存区(类似于全局变量区),函数返回时,并不会释放内存,因此可以将要返回的变量加static修饰. int *test ...

  10. Java字节码扩展

    异常表 代码一: public class Test03 { public void test() { try { InputStream is = new FileInputStream(" ...