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. maven基础依赖外部lib包(依赖钉钉sdk为例)

    jar包放置位置 pom.xml指定依赖 1 <dependencies> 2 <!--钉钉工具包,如缺失请到钉钉服务器开发文档下载--> 3 <dependency&g ...

  2. Spring MVC -- 下载文件

    像图片或者HTML文件这样的静态资源,在浏览器中打开正确的URL即可下载,只要该资源是放在应用程序的目录下,或者放在应用程序目录的子目录下,而不是放在WEB-INF下,tomcat服务器就会将该资源发 ...

  3. Modelsim SE-64 10.4的安装 、破解以及远程使用

    1.准备好modelsim SE-64 10.4的安装包和破解文件(modelsim-win64-10.4-se.exe  和MentorKG.exe ,patch_dll.bat). 2.安装 好  ...

  4. python 中的eval与exec

    eval类似exec,是使用python编译器运行表达式和语句两者区别在于:eval是编译表达式并返回值(如: eval("'hello'*2") 结果是 hellohello)e ...

  5. 【springcloud】Transaction rolled back because it has been marked as rollback-only

    问题: 一个ajax请求,发生系统错误,错误内容:Transaction rolled back because it has been marked as rollback-only 原因是调用的s ...

  6. 错误: 找不到或无法加载主类 java操作hbase出错

    用java操作hbase 利用maven引入hbase包后发现无法启动程序,然后网上说是包的冲突. 我引入了下面三个包然后程序就不能运行了. <dependency> <groupI ...

  7. 【模板】bitset

    Bitset常用操作: bitset<size> s; //定义一个大小为size的bitset s.count(); //统计s中1的个数 s.set(); //将s的所有位变成1 s. ...

  8. 在O(1)的时间内删除链表节点

    题目: 在O(1)的时间内删除链表节点.给定链表的头指针和待删除的节点指针,定义一个函数在O(1)的时间内删除该节点. 剑指offer的思路,顿时觉得极妙.删除节点node1,先把其下一个节点node ...

  9. .NET-异步操作

    感觉可以用于log日志的东西,这个东西他还是会走的但是不会影响你下一步的操作,你下一步还是正常怎么操作就怎么操作! 这样可以给用户免掉一些没必要的等待. static void Main(string ...

  10. ASP.NET Nlog上手练习小例子

    添加NuGet程序包-             Nlog             Nlog.Web.AspNetCore 两个包. public void Configure(IApplication ...