実行可能ファイルが存在するだけでなく、有効であるかをテストする(比較的)簡単な方法はありますか?
うまくいくことは、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バイナリには影響しません。