请教一个关于 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文件。

3年前 评论
ASA2020 (楼主) 3年前
1112 (作者) 3年前
讨论数量: 1

ls /dev/tty**是终端处理的,建议ioutil.ReadDir("/dev")读取这个目录,然后过滤tty文件。

3年前 评论
ASA2020 (楼主) 3年前
1112 (作者) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!