2.22. Good and Bad Practices

A very common and very bad practice in shell scripting is checking the wrong information to make decisions. One of the most common ways this bad approach is used involves making assumptions based on the operating system in use.

Take the following code segment, for example:

if [ `uname` == 'Linux' ]; then
    compiler='gcc'
    endian='little'
fi
	

Both of the assumptions made about Linux in the code above were taken from real examples!

Setting the compiler to 'gcc' because we're running on Linux is wrong, because Linux can run other compilers such as clang or icc. Compiler selection should be based on the user's wishes or the needs of the program being compiled, not the operating system alone.

Assuming the machine is little-endian is wrong because Linux runs on a variety of CPU types, some of which are big-endian. The user who wrote this code probably assumed that if the computer is running Linux, it must be a PC with an x86 processor, which is not a valid assumption.

There are simple ways to find out the actual endianness of a system, so why would we instead try to infer it from an unrelated fact?? We should instead use something like the open source endian program, which runs on any Unix compatible system.

if [ `endian` == 'little' ]; then

fi