Skip to main content

Programmer's Guide: The "set" command in bash

The "set" command in shell allows you to set various shell options and positional parameters. The purpose of this post is to highlight how much this command has been helpful to me in my bash programming. I would not go into much depth about all the possible flag, because you can find many posts and documentation on the internet, like this post by GNU, which cover all the possible options that the "set" command provides. I will mainly focus on two options,

The "set -x" option: 

This option allows us to print commands and their arguments, after they are expanded (interpolated) but before they are executed.

Let us execute a simple hello world programme in bash.


When the programme is executed, we see the entire printf statement being printed before the actual "Hello World!" message is printed. This way, we can check the command that is being executed along with its output.


Setting the flag also expands any variables or arguments (interpolation) and prints them before execution. Furthermore, we can unset the option using "+" sign. 
In the below example, $1 implies that the programme should print 1st argument provided to it. Also, -x option is unset by setting +x.


If we run the code with 1st argument "Bash", observe that it prints Bash in the print statement before actually printing it. Also observe that the printf command is not shown after unsetting the -x option.

The "set -e" option:

This causes the programme to exit immediately if the command being executed returns a non-zero status. This is useful if you want to prevent further, possibly critical, code execution in case a certain command fails.

Continuing with our programme, I have modified the code to cat (print contents) of a file that doesn't exist. I have also "set -e".


The programme execution stops immediately and does not execute the critical section that comes after.


This flag is also useful in debugging a code. If you want to allow execution of certain commands which may cause errors but not allow certain commands whose output is not known, you can prevent termination of code by creating a complex command which returns status-code 0.

In the below code, we can continue execution in case a certain non-critical file doesn't exist, but we must not execute any further if a critical input file is not present.



As can be observed in the above execution, if a temporary file is missing and if we can safely ignore it, we can use "true" value and OR it with the command output to make a complex command whose exit status code is 0. You can read more about "true" value and exit status codes in bash here.
Status code 0 means that the overall command doesn't have any errors and the programme doesn't terminate. But it still terminates if a critical file is not present. So, execution of critical block is prevented which might have caused major issues.

Both these options have helped me tremendously while writing bash scripts. I hope you will find these options useful. Do explore other set options and let me know their uses in comments below.

Comments

  1. -x & -e are helpful flags while debugging shell scripts
    another approach is to use them in command line "bash -x script_name"

    ReplyDelete

Post a Comment

Popular posts from this blog

My Entry into the World of Credit Cards

After joining my job in June 2018, my salary account was opened in ICICI Bank. During the account opening process, I was offered a Life Time Free (LTF) credit card. Simply put, this was my first chance to get into the credit world without any extra hassle because first of all, neither was I aware of the concept of credit scores nor I had any credit history and secondly, I was just curious about credit cards after seeing of my father use his credit cards with extra caution and the monthly event of credit card bill payment that used to happen at my home. And in that sudden moment of joy, I made my first mistake in the credit world. Representative Image (Source: https://jessepollak.github.io/card/) Now if your guess is that I started spending crazy amounts of money which I couldn't repay, then you are WRONG! I am a miserly person. Money doesn't leave my hands and in general, my credit utilization has never exceeded 5% of my credit limit. So coming back to my first mis...

ICICI Credit Limit Increase Offer

Recently, ICICI Bank offered me a free credit limit increase for my Lifetime Free ICICI Platinum Chip Credit Card. My limit is being increased by ~31%. For last couple of weeks, I was seeing increased available credit limit on my ICICI net-banking page. I also received an SMS stating that they are offering me a free credit limit increase, after the bill for the latest credit cycle was generated. The same limit enhancement offer is visible in iMobile app as well. See the last SMS message in the above screenshot In the Latest Bill tab you will see the Manage Limit option just above My Rewards. I have been using the card for around 10-11 months. Although this increase seems low, considering utilization, it seems fair. The highest credit utilization was around 15% once, while for the last couple of months, it was <1%. On average it was in 2-3% range. One can accept the increase through any of the three modes, SMS, netbanking or iMobile. It will immediately update the lim...

The Japanese Constitution - Chapter 1

Chapter 1 - The Emperor Article 1 The Emperor shall be the symbol of the State and of the unity of the People, deriving his position from the will of the people with whom resides sovereign power. This article makes the post of emperor a symbolic one just like the post of Queen in UK or the post of president in a parliamentary democracy. It also emphasizes that the real power resides in the hands of people making it clear that there will be a democratic order of governance in Japan. Article 2 The Imperial Throne shall be dynastic and succeeded to in accordance with the Imperial House Law passed by the Diet. This article describes how the people will control the position of emperor through their elected representatives. Article 3 The advice and approval of the Cabinet shall be required for all acts of the Emperor in matters of state, and the Cabinet shall be responsible therefor. Article 4 The Emperor shall perform only such acts in matters of state as are provided for in th...