我正在编写一个Shell脚本,用户将把路径传递给JAVA_HOME作为参数。我想检查JAVA_HOME路径是否有效。那么如何检查传递的输入路径是否是exe文件(Unix可执行文件)?假设用户是否传递/ usr / bin / java - 如果用户传递了/usr/bin/test.txt(某些文本文件),那么它是有效的 - 这是无效的。那么如何检查文件是否为Unix可执行文件类型?
我尝试使用-x,猜测这不是礼仪检查,因为它也会为/ usr / bin返回true !!!
答案 0 :(得分:5)
最简单的方法是使用file命令。
$ 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
$
您可以将file
的输出格式化为合适的字符串,例如“可执行”。
答案 1 :(得分:0)
Unix“可执行文件”是指具有execute属性集的任何内容。您不能依赖于此,因为您可以在pdf文档上设置执行权限,例如。
相反,也许您应该用来检测文件类型的是file
命令。例如,它会告诉您文件是二进制文本还是纯文本。
答案 2 :(得分:0)
测试的手册页很清楚,只有-x
不会这样做
-x file如果文件存在且可执行,则为True。 True表示只执行 国旗是。如果file是目录,则true表示可以搜索文件。
但是,如果将其与-f
和-r
-f file如果文件存在且为常规文件,则为真。
-r file如果文件存在且可读,则为真。
您将知道该文件是否具有必需的属性是可执行文件。
用户可能已经在非可执行文件上设置了这些属性,但这显然是用户错误。
此处的摘录摘自Mac OS 10.5版本。在其他系统(特别是Linux)上,您可能看起来略有不同。