我正在编写一个Shell脚本,其中用户将路径作为参数传递给JAVA_HOME。我想检查JAVA_HOME路径是否有效。那么如何检查传递的输入路径是否是exe文件(Unix可执行文件)呢?假设用户传递/ usr/bin/java - 这是有效的,如果用户传递/usr/bin/test.txt(某些文本文件) - 这是无效的。那么如何检查文件是否是Unix可执行文件的类型呢?Shell脚本来检查文件的类型是否可执行文件
我用-x试过,猜测这不是仪式检查,因为它也为/ usr/bin返回true!
我正在编写一个Shell脚本,其中用户将路径作为参数传递给JAVA_HOME。我想检查JAVA_HOME路径是否有效。那么如何检查传递的输入路径是否是exe文件(Unix可执行文件)呢?假设用户传递/ usr/bin/java - 这是有效的,如果用户传递/usr/bin/test.txt(某些文本文件) - 这是无效的。那么如何检查文件是否是Unix可执行文件的类型呢?Shell脚本来检查文件的类型是否可执行文件
我用-x试过,猜测这不是仪式检查,因为它也为/ usr/bin返回true!
最简单的方法是使用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
输出一个合适的字符串,例如“可执行”。
Unix“可执行文件”是任何设置了执行属性的文件。例如,你不能依赖这个,因为你可以在PDF文档上设置执行权限。
也许你应该用什么来检测文件的类型是file
命令。例如,它会告诉你文件是二进制还是纯文本。
测试手册页是很清楚,只是-x
不会,如果文件存在且可执行做
-x文件真实。 True仅表示执行 标志处于打开状态。如果file是目录,则true表示可以搜索文件。
但是,如果你把这个有-f
和-r
-f文件真,如果文件存在且是一个普通文件。
-r file如果文件存在且可读,则为真。
你会知道该文件是否具有必要的属性是一个可执行文件。
用户可能已经将这些属性设置为不可执行,但这显然是用户错误。
手册页摘录取自Mac OS 10.5版本。在其他系统(特别是Linux)上,你可能看起来略有不同。
在您看到问题的地方张贴脚本的片段。 – rkyser 2012-07-31 18:16:39