有効な実行ファイルかどうかテスト

有効な実行ファイルかどうかテスト

実行可能ファイルが存在するだけでなく、有効であるかをテストする(比較的)簡単な方法はありますか?

うまくいくことは、x86_64 Mach-O(OS X)実行可能ファイルがARM Raspberry Piで実行されないことを意味します。ただし、実行可能ファイルは実行されますが、失敗するx86_64tool-osx || tool-rpiに置き換えられないOS Xで実行すると機能します。tool-rpi

プロセッサアーキテクチャに無効な実行ファイルがある場合は、他の実行ファイルに置き換える方法は?

答え1

有効な実行ファイルをテストするのではなく、現在のアーキテクチャをテストしてから、そのアーキテクチャに基づいて正しい実行ファイルを選択してください。たとえば、

if [ $(uname -m) == 'armv6l' ]; then
    tool-rpi
else
    tool-osx
fi

しかし、実行ファイルをテストしたい場合本物必要に応じて、GNUはfile実行可能ファイルのアーキテクチャを知らせることができます。

user@host:~$ file $(whereis cat)
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x4e89fd8f129f0a508afa325b0f0f703fde610971, stripped

答え2

Linux glibc で動的にリンクされた実行可能ファイルが実際に実行されず、正常に実行できることをテストするために使用できる 1 つの方法は、LD_DEBUG=helpその環境で設定することです。良い場合は、ヘルプメッセージをエクスポート(無視)して正常に終了します。無効な場合はエラーが発生します。

残念ながら、これはLinux glibcに固有のもので、MacOSについて尋ねているようです。また、静的にリンクされたバイナリとsetuidまたはsetgidバイナリには影響しません。

関連情報