Я согласен с lhunath препятствовать использованию which
, и его решение совершенно справедливо для пользователей BASH . Однако, чтобы быть более переносимым, вместо него следует использовать command -v
:
$ command -v foo >/dev/null 2>&1 || { echo "I require foo but it's not installed. Aborting." >&2; exit 1; }
Команда command
совместима с POSIX, ее спецификация приведена здесь: http://pubs.opengroup.org /onlinepubs/9699919799/utilities/command.html
Примечание: type
соответствует POSIX, но type -P
- нет.
Все машины x86 и x86-64 (которые являются просто расширением x86) имеют прямой порядок байтов.
Вы можете подтвердить это примерно так:
#include <stdio.h>
int main() {
int a = 0x12345678;
unsigned char *c = (unsigned char*)(&a);
if (*c == 0x78) {
printf("little-endian\n");
} else {
printf("big-endian\n");
}
return 0;
}
Простой способ узнать порядок байтов указан в статье Написание кода, не зависящего от порядка байтов на C
const int i = 1;
#define is_bigendian() ( (*(char*)&i) == 0 )
Отвечая на ваш последний вопрос, ответ отрицательный. Linux может работать на машинах с прямым порядком байтов, таких как, например, PowerMac старого поколения.
Вам необходимо загрузить версию Ubuntu, разработанную для машин с прямым порядком байтов. Мне известны только версии PowerPC . Я уверен, что вы найдете место, где есть более общая реализация с прямым порядком байтов.
"Intel-совместимый" не очень точен.
Intel использовала процессоры с обратным порядком байтов, особенно StrongARM и XScale. В них не используется IA32 ISA, широко известный как x86.
Еще дальше в истории Intel также сделала i860 и i960 с прямым порядком байтов, которые также не являются x86-совместимыми.
Еще дальше в истории - предшественники. x86 (8080, 8008 и т. д.) также не совместимы с x86. Для 8-битных процессоров порядок байтов на самом деле не имеет значения ...
В настоящее время Intel по-прежнему выпускает Itanium (IA64) с обратным порядком байтов: нормальная работа идет с прямым порядком байтов, но процессор также может работать с малым -индийский режим. Так получилось, что код x86 можно запускать в режиме прямого порядка байтов, но родной ISA не является IA32.
Насколько мне известно, все AMD ' s были x86-совместимы с некоторыми расширениями, такими как x86_64, и поэтому обязательно имеют прямой порядок байтов.
Ubuntu доступен для x86 (прямой порядок байтов) и x86_64 (прямой порядок байтов), с менее полными портами для ia64 ( прямой порядок байтов), ARM (el) (прямой порядок байтов), PA-RISC (прямой порядок байтов, хотя процессор поддерживает оба), PowerPC (обратный порядок байтов) и SPARC (прямой порядок байтов). Я не верю, что существует порт ARM (eb) (big-endian).
Assuming you have Python installed, you can run this one-liner, which will print "little" on little-endian machines and "big" on big-endian ones:
python -c "import struct; print 'little' if ord(struct.pack('L', 1)[0]) else 'big'"