1

我正在编写一个 Shell 脚本,用户将在其中将 JAVA_HOME 的路径作为参数传递。我想检查 JAVA_HOME 路径是否有效。那么如何检查传递的输入路径是否为 exe 文件(Unix 可执行文件)?假设如果用户通过 /usr/bin/java - 这是有效的,如果用户通过 /usr/bin/test.txt (一些文本文件) - 这是无效的。那么如何检查文件是否为 Unix Executable File 类型?

我试过 -x ,猜那不是仪式检查,因为它也为 /usr/bin 返回 true !!!

4

3 回答 3

5

最简单的方法是使用文件命令。

$ file /usr/bin
/usr/bin: directory
$ file /usr/bin/java
/usr/bin/java: Mach-O universal binary with 2 architectures
/usr/bin/java (for architecture x86_64):    Mach-O 64-bit executable x86_64
/usr/bin/java (for architecture i386):  Mach-O executable i386
$ 

您可以只用 grep 的输出来file寻找合适的字符串,例如“可执行文件”。

于 2012-07-31T18:18:00.030 回答
0

Unix“可执行文件”是任何设置了执行属性的东西。例如,您不能依赖它,因为您可以在 pdf 文档上设置执行权限。

也许您应该使用file命令来检测文件类型。例如,它将告诉您文件是二进制文件还是纯文本。

于 2012-07-31T18:18:52.797 回答
0

test 的手册页很清楚,只是-x不会这样做

-x 文件 如果文件存在且可执行,则为真。True 仅表示执行标志打开。如果 file 是目录,则 true 表示可以搜索文件。

但是如果你把它-f-r

-f file 如果文件存在并且是常规文件,则为真。

-r 文件 如果文件存在且可读,则为真。

您将知道该文件是否具有成为可执行文件的必要属性。


用户仍有可能在不可执行文件上设置这些属性,但这显然是用户错误。


手册页摘录自 Mac OS 10.5 版本。在其他系统(尤其是 Linux)上,您可能看起来有些不同。

于 2012-07-31T18:21:13.397 回答