请教一个关于 exec.Command 的使用问题
我想要获取当前Ubuntu18.04设备中已经连接的所有tty设备,于是想通过使用ls命令来获取。然后写出了如下代码:
package main
import (
"io/ioutil"
"log"
"os/exec"
)
func main() {
var err error
command := exec.Command("ls", "/dev/tty*")
stdout, err := command.StdoutPipe()
if err != nil {
log.Println(err.Error())
return
}
defer stdout.Close()
err = command.Start()
if err != nil {
log.Println(err.Error())
return
}
bytes, err := ioutil.ReadAll(stdout)
if err != nil {
log.Println(err.Error())
return
}
log.Println(string(bytes))
}
可是运行结果打印出了nothing,即空字符串。我随即在终端执行
ls /dev/tty*
可以显示当前的所有tty设备。
后来,我把代码中的
command := exec.Command("ls", "/dev/tty*")
改成了
command := exec.Command("ls", "/dev/tty0")
即,使用了一个真实存在的具体设备作为参数,这时,程序能够打印出预期的查询信息。
我在源码文档中似乎并未看到相关的解释。请问,是我哪里做错了吗?
ls /dev/tty*
中*
是终端处理的,建议ioutil.ReadDir("/dev")
读取这个目录,然后过滤tty文件。