On 03/20/14 23:33, Marcel Apfelbaum wrote: > On Thu, 2014-03-20 at 23:26 +0100, Laszlo Ersek wrote: >> On 03/20/14 23:06, Marcel Apfelbaum wrote: >>> On Thu, 2014-03-20 at 22:57 +0100, Paolo Bonzini wrote: >>>> Il 20/03/2014 22:14, Marcel Apfelbaum ha scritto: >>>>> +# All known versions of iasl on BE machines are broken. >>>>> +# TODO: add detection code once a non-broken version makes an appearance. >>>>> +if ($iasl -h > /dev/null 2>&1) && >>>>> + (lscpu | grep "Byte Order" | grep --quiet "Little Endian" ); then >>>> >>>> lscpu is not portable. >>> I am open to suggestions... >>> I'll try to come up with something else. >> >> The printf and od utilities are portable. You can use printf to print a >> character string, and use od to group that character string into >> multibyte integers in the native byte order. >> >> Example: >> >> X=$(printf '\336\255\276\357' | od -A n -t x4) > Hi Laszlo, > Thanks for the help! > > I've seen something like that somewhere, but I didn't quite like it. > I was looking for something more elegant as I was *almost* sure > this kind of solution will not pass the reviews :) > > But maybe I'll try this, let's see what happens,
For ultimate pedantry, don't depend on the number and kind of blanks on the left hand side of the output. If you set LC_ALL to POSIX, then only <space> and <tab> count as blank; but even that way you should be prepared to see any number of them on the LHS. Probably just use grep: if printf '\336\255\276\357' | od -A n -t x4 | grep -q deadbeef; then printf 'big endian\n' >&2 fi Laszlo