【问题标题】:Check for Binary Existence in Golang [duplicate]检查Golang中的二进制存在[重复]
【发布时间】:2018-03-30 20:09:59
【问题描述】:

我正在尝试通过 Go 检查机器上是否存在 shell 二进制文件。

我尝试了一些更简单的基于 shell 的命令:

    args := []string{"-x", "fly"}
    o, err := exec.Command("test", args...).Output()
    fmt.Println(err)
    fmt.Println(o)

但这无论如何都有一个出口 1 并且什么也不输出。

我想知道 Go 本身是否有具有此功能的东西,显然我宁愿使用 Go 本身来完成繁重的工作。

谢谢!

【问题讨论】:

  • @MiloChristiansen 这可能是重复的还是完全重复的?我认为问题不在于检查诸如“/home/user/abc.txt”之类的文件,而更有可能检查“telnet”是否有效(在$ PATH中)。 (我不懂golang)
  • 我不知道,你想要test -x 的等价物,还是想要一些其他的行为?
  • 是的,它主要是检查 telnet 之类的东西是否在 PATH 中有效。检查文件不起作用,因为我需要做额外的工作才能找到可执行文件的完整路径。我试图看看 unix 中是否有类似 -x 的东西
  • @jaibhavaya:这是两个不同的问题。有exec.LookPath,它在你的PATH 中查找文件,它应该是一个可执行文件,所以你不需要测试它,你只需尝试执行它。 test -x 所做的是检查文件模式是否设置了任何可执行位(但这并不一定意味着 you 可以执行它。)。您可以通过 FileInfo.Mode 方法获得模式位。
  • 我认为@JimB 的解决方案应该是答案(并且这个问题不应该重复,因为提问者明确说明了一个可执行文件,而不仅仅是 Go 有特定解决方案的任何文件)跨度>

标签: bash go


【解决方案1】:

这是一种简单地检查文件是否存在的方法。

if _, err := os.Stat("/dir/file"); os.IsNotExist(err) {
    fmt.Printf("File doesn't exist")
} else {
    fmt.Printf("Exists")
}

了解更多:os.Stat()os.IsNotExist()

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
相关资源
最近更新 更多