Understanding Shell Built-ins and Command Execution
Shell commands play a critical role in scripting and system management. In this blog, we’ll explore shell built-ins, their importance, and how the shell processes commands using a specific sequence. Let’s dive in!
What are Shell Built-ins?
A shell built-in is a command that is executed directly by the shell itself rather than requiring an external program.
Advantages of Built-ins
- Faster Execution:
- No need to load an external program, saving time.
- Efficiency:
- Especially useful for frequently used commands where the overhead of loading an external program is unnecessary.
How Shell Executes Commands
When you run a command in the shell, the shell follows a specific sequence to determine how to execute it:
-
Check for a Function:
- If a function with the same name exists, it is executed.
-
Check for Built-ins:
- If no function is found, the shell checks its list of built-ins.
-
Search in the PATH:
- If no built-in matches, the shell searches for an executable in the directories specified in the
PATHenvironment variable.
- If no built-in matches, the shell searches for an executable in the directories specified in the
Practical Examples
Example 1: Checking Command Type
The type command helps identify whether a command is a built-in, a function, or an external program.
Using uptime
┌──(gaurav㉿learning-ocean)-[~]
└─$ uptime
01:37:53 up 2 min, 2 users, load average: 0.60, 0.59, 0.26
Identify the type of uptime:
┌──(gaurav㉿learning-ocean)-[~]
└─$ type -a uptime
uptime is /usr/bin/uptime
uptime is /bin/uptime
Here, uptime is an external command located in /usr/bin and /bin.
Using echo
┌──(gaurav㉿learning-ocean)-[~]
└─$ echo "Hello from Built-in"
Hello from Built-in
Check the type of echo:
┌──(gaurav㉿learning-ocean)-[~]
└─$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
echo is /bin/echo
In this case, echo is both a shell built-in and an external command. The shell prioritizes the built-in for faster execution. Both versions provide the same functionality.
Example 2: PATH Variable
If a command isn’t a built-in, the shell searches for its executable in the directories listed in the PATH environment variable.
Check the PATH value:
┌──(gaurav㉿learning-ocean)-[~]
└─$ echo $PATH
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/kali/.dotnet/tools
Built-ins vs. External Commands
The execution priority of commands depends on whether they are built-in or external. Built-ins are prioritized for faster execution.
Example: echo
Built-in:
┌──(gaurav㉿learning-ocean)-[~]
└─$ echo "This is a shell built-in"
This is a shell built-in
External:
┌──(gaurav㉿learning-ocean)-[~]
└─$ /usr/bin/echo "This is an external command"
This is an external command
Reserved Keywords
Keywords are reserved words in the shell that cannot be used as variable names because they have predefined meanings. For example:
┌──(gaurav㉿learning-ocean)-[~]
└─$ type -a if
if is a reserved word
Examples of reserved keywords:
ifthenelsefi
Conclusion
Understanding shell built-ins, reserved keywords, and command execution sequences is essential for efficient scripting. Built-ins provide faster execution and reduce the overhead of running external programs. Use the type command to identify built-ins and functions, and manage your PATH to ensure smooth execution of external commands.
For more tutorials and examples, visit learning-ocean.com. See you in the next blog!
Happy Scripting!