首页 > 系统相关 >go 执行shell命令

go 执行shell命令

时间:2023-08-07 11:36:15浏览次数:33  
标签:shell err exec res fmt ctx 命令 go main

简单案例

package main

import (
	"context"
	"fmt"
	"os/exec"
)

var (
	ctx = context.Background()
)

func main() {
	cmd := exec.CommandContext(ctx, "ip", "a")
	res, err := cmd.Output()
	if err != nil {
		panic(err)
	}
	fmt.Println(string(res))
}

注意:命令的第一个参数一定是一个可以在bash环境下直接运行的文件,否则,不会成功
例如:这里是把ip a拆开来运行的,而不是写在一起运行

带有管道符的命令

一条命令完成

这里需要借助 bash -c 命令

package main

import (
	"context"
	"fmt"
	"os/exec"
)

var (
	ctx = context.Background()
)

func main() {
	cmd := exec.CommandContext(ctx, "bash", "-c", "ip a | grep host")
	res, err := cmd.Output()
	if err != nil {
		panic(err)
	}
	fmt.Println(string(res))
}

因为有特殊字符(管道符),所以,这里需要使用 bash -c 来运行

注意:最后一个参数最好是全部命令,除了 bash -c 不要分开写

组合执行

package main

import (
	"bytes"
	"context"
	"fmt"
	"os/exec"
)

var (
	ctx = context.Background()
)

func main() {
	cmd1 := exec.CommandContext(ctx, "bash", "-c", "ip a")

	// 获取标准输出和标准错误输出
	out1, err := cmd1.Output()
	if err != nil {
		panic(err)
	}

	// 构建第二部分命令
	cmd2 := exec.CommandContext(ctx, "grep", " host")
	// 将第一部分的输出转换成bytes.Reader类型,然后传递给第二部分命令的输出
	cmd2.Stdin = bytes.NewReader(out1)
	res, err := cmd2.Output()
	if err != nil {
		panic(err)
	}
	fmt.Println(string(res))
}

标签:shell,err,exec,res,fmt,ctx,命令,go,main
From: https://www.cnblogs.com/guangdelw/p/17610969.html

相关文章

  • Java:Java程序通过执行系统命令调用Python脚本
    本文实现功能:Java程序调用Python脚本Python脚本importsysdefadd(x,y):returnx+yif__name__=="__main__":print(add(int(sys.argv[1]),int(sys.argv[2])))直接执行$pythonmath.py123Java程序调用Python脚本packageio.github.mouday.utils;importja......
  • go项目部署到服务器上
    生成linux可执行文件main。首先再windowscmd平台下生成linux可执行的文件在cmd或者powershell执行以下命令setGOARCH=amd64goenv-wGOARCH=amd64setGOOS=linuxgoenv-wGOOS=linux然后到main.go所在的目录下,正常gobuild即可gobuildmain.go如果想要再切换回w......
  • 比较 Java Enterprise Architecture 中的 MongoDB 和 Couchbase
    MongoDB和Couchbase是两种常用的NoSQL数据库,用于在Java实现的企业架构中存储和管理数据。以下是它们之间的主要差异、比较和权衡。在当今快速发展的企业架构领域,MongoDB和Couchbase已经成为NoSQL数据库中两个重要的竞争者。本文全面探讨了这两个强大解决方案之间的关键差异、比较和......
  • 几个代码提升shell逼格
    在Linux系统中shell命令能够高效的运行并发的处理任务,shell脚本也并不乏味,不仅有魔音还有shell的颜色显示。下面我们就用shell中的颜色来秒提高shell脚本的逼格。我们举一个例子:echo-e"\033[44;37;5m ME \033[0mCOOL"以上命令设置背景成为蓝色,前景白色,闪烁光标,输出字符“ME”,然......
  • Mongodb主从复制分片群集
    推荐步骤:1.在centos05-centos07上安装mongodb,配置主从复制和分片群集,centos05到centos07添加分片sh1分片群集2.在centos08-centos10上安装mongodb,配置主从复制和分片群集,centos08到centos10添加到分片sh2分片群集3.在centos01到centos03安装mongodb配置为配置节点4.配置分片功能实......
  • 【LGR-148-Div.3】洛谷基础赛 #1 & MGOI Round I
    【LGR-148-Div.3】洛谷基础赛#1&MGOIRoundIT1luoguP9502『MGOI』SimpleRoundI|A.魔法数字\(100pts\)水题,场切了。#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#definesortstable_sort#defineendl'\n'intmain(){ ......
  • 『MGOI』Simple Round I | B. 魔法照相馆 题解
    题目传送门一道模拟题。并不复杂的模拟题,也不需要用到贪心。我们可以创建一个数组来记录每个幕布是否被拉上,统计答案的时候,就看看这块幕布前面有多少个没拉上的,最后如果这块幕布拉上了,就重新放下来就行了。#include<bits/stdc++.h>#definelllonglong#defineINF1e9usi......
  • post请求,go源码会把“+”字符转成了空格导致的验签失败问题
    问题描述:安卓7.29的包客户端书城男女图书页面显示异常,冷启动、下拉刷新等都无法恢复,个别用户清除缓存数据后恢复。(说明:安卓从72880开始的包,客户端书城接口升级为v7:/api/v7/book-store,post请求) 问题原因:线上书城男女图书v7接口part1的post接口请求,个别手机出现401验签失败。......
  • 【技术积累】Linux中的命令行【理论篇】【五】
    arpd命令命令介绍arpd命令是Linux系统中的一个网络工具,用于管理和操作ARP(地址解析协议)缓存。ARP协议用于将IP地址映射到MAC地址,以便在局域网中进行通信。命令说明arpd命令的主要功能包括:1.显示和管理ARP缓存:arpd命令可以显示当前系统中的ARP缓存表,包括IP地址和对应的MAC地址......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......