2012-07-31 81 views
1

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

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

+0

在您看到问题的地方张贴脚本的片段。 – rkyser 2012-07-31 18:16:39

回答

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 
$  

你可以只用grep的file输出一个合适的字符串,例如“可执行”。

0

Unix“可执行文件”是任何设置了执行属性的文件。例如,你不能依赖这个,因为你可以在PDF文档上设置执行权限。

也许你应该用什么来检测文件的类型是file命令。例如,它会告诉你文件是二进制还是纯文本。

0

测试手册页是很清楚,只是-x不会,如果文件存在且可执行做

-x文件真实。 True仅表示执行 标志处于打开状态。如果file是目录,则true表示可以搜索文件。

但是,如果你把这个有-f-r

-f文件真,如果文件存在且是一个普通文件。

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

你会知道该文件是否具有必要的属性是一个可执行文件。


用户可能已经将这些属性设置为不可执行,但这显然是用户错误。


手册页摘录取自Mac OS 10.5版本。在其他系统(特别是Linux)上,你可能看起来略有不同。

相关问题