1

ユーザーがJAVA_HOMEへのパスをパラメーターとして渡すシェルスクリプトを書いています。JAVA_HOMEパスが有効かどうかを確認したかったのです。では、渡された入力パスがexeファイル(Unix実行可能ファイル)であるかどうかを確認するにはどうすればよいですか?ユーザーが/usr/ bin / javaを渡した場合(これは有効です)、ユーザーが/usr/bin/test.txt(一部のテキストファイル)のように渡した場合は無効です。では、ファイルのタイプがUnix実行可能ファイルであるかどうかを確認するにはどうすればよいですか?

-xを試してみましたが、これは儀式チェックではないと思います。これは、/ usr/binに対してもtrueを返すためです。

4

3 に答える 3

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「executable」などの適切な文字列の出力をgrepするだけです。

于 2012-07-31T18:18:00.030 に答える
0

Unixの「実行可能ファイル」とは、execute属性が設定されているものです。たとえば、PDFドキュメントに実行権限を設定できるため、これに依存することはできません。

おそらく、ファイルの種類を検出するために使用する必要があるのはfile、代わりにコマンドです。たとえば、ファイルがバイナリテキストかプレーンテキストかがわかります。

于 2012-07-31T18:18:52.797 に答える
0

テストのマニュアルページは、-xそれを実行するつもりはないことを非常に明確にしています。

-x fileファイルが存在し、実行可能である場合はTrue。Trueは、実行フラグがオンになっていることのみを示します。fileがディレクトリの場合、trueはファイルを検索できることを示します。

しかし、これをとと組み合わせる-f-r

-f fileファイルが存在し、通常のファイルである場合はTrue。

-r fileファイルが存在し、読み取り可能である場合はTrue。

ファイルに実行可能ファイルとして必要なプロパティがあるかどうかがわかります。


ユーザーがこれらのプロパティを実行可能ファイルに設定できなかった可能性は残っていますが、それは明らかにユーザーエラーになります。


MacOS10.5バージョンから抜粋したマニュアルページの抜粋。他のシステム(特にLinux)では少し違うように見えるかもしれません。

于 2012-07-31T18:21:13.397 に答える