【问题标题】:Shell Script to check if file is of type Unix Executable File用于检查文件是否为 Unix 可执行文件类型的 Shell 脚本
【发布时间】:2012-07-31 18:14:08
【问题描述】:

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

我尝试使用 -x ,猜想这不是 rite check ,因为 /usr/bin 也返回 true !!!

【问题讨论】:

  • 在您发现问题的地方发布脚本的 sn-p。

标签: linux shell


【解决方案1】:

最简单的方法是使用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 的输出中查找合适的字符串,例如“可执行”。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      测试的手册页很清楚,-x 不会这样做

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

      但如果你将它与-f-r 结合使用

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

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

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


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


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

      【讨论】:

        猜你喜欢
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-04
        • 1970-01-01
        相关资源
        最近更新 更多