【发布时间】: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 有特定解决方案的任何文件)跨度>