- How to Pause a Bash Script | Linux Sleep Command
- What is Sleep Command in Linux?
- How to Use Linux sleep Command to Pause a Bash Script?
- Example 1: Pause Bash Script for 10 seconds
- Example 2: Set up an Alarm
- Example 3: Create a Digital Clock
- Conclusion
- How do I pause my shell script for a second before continuing?
- 11 Answers 11
- What is the Linux equivalent to DOS pause?
- 10 Answers 10
- Commands
- Explanation
How to Pause a Bash Script | Linux Sleep Command
While creating a bash script in Linux, several commands are used one by one to perform a specific task. To pause the execution of a script or command for a specific time, you must specify the length of time you want to wait, followed by the “sleep” command.
The “sleep” command in Linux is a simple but powerful tool that allows the user to pause the commands or script execution for a specified time.
This guide will elaborate on the uses of the sleep command in the bash script with this timeline:
- What is Sleep Command in Linux?
- How to Use Linux sleep Command to Pause a Bash Script?
- Example 1: Pause Bash Script for 10 seconds
- Example 2: Set up an Alarm
- Example 3: Create a Digital Clock
- Example 4: Pause Bash Script Using for loop
Let’s begin with the basic understanding of the sleep command.
What is Sleep Command in Linux?
The sleep command is used to sleep the system, which adds the delay between the two commands. The general syntax for the sleep command is as follows:
- sleep: Use to add delay in the system.
- Number: Replace it with the desired number of seconds, minutes, or hours.
- suffix: Replace it with a specified time. such as days(d), hours (h), minutes (m), or seconds(s).
Here are examples of different sleep periods in Linux:
$ sleep 2 $ sleep 2s To sleep the system for two (2) seconds. (By default seconds) $ sleep 3m To add the delay for three (3) minutes. $ sleep 2h h option is used for an hour; this command adds the sleep time for two hours. $ sleep 1d To sleep the system for one day. $ sleep 2d 5h 30m 12s Sleep command accept multiple suffixes. For instance, it delays the system for 2 days, 5 hours, 30 minutes, and 12 seconds. How to Use Linux sleep Command to Pause a Bash Script?
The sleep command is very useful in the bash script when we want to complete the previous task and then execute the next command. We can pause the bash script with the sleep command; let’s use the sleep command in the bash script with the help of examples.
Example 1: Pause Bash Script for 10 seconds
The bash script runs several commands one by one. To add the sleep time of ten (10) seconds before executing an echo command, use the below command:
#!/bin/bash Str1="Print after 10 seconds"; sleep 10 echo $Str1
To execute the bash script, use this command:
It will delay the system for 10 seconds and then execute the echo command as shown in the above output.
Example 2: Set up an Alarm
We can sleep the system for a specified time and then runs the alarm tone to wake up. For instance, we want to take 7 hour’s break and then run the alarm.mp3 using the below command:
Example 3: Create a Digital Clock
To create a digital clock, the sleep command is used. The digital clock runs after every second and updates the time. The below while loop script can be used to provide a delay of every second and updates the time as in digital clock:
Let’s understand the code line-by-line:
#!/bin/bash while true do clear echo $(date +%T) sleep 1s done
- while: Checks the loop if the condition is true.
- Clear: Clears the screen every time and prints the time on a blank screen.
- echo: Prints the date in time format (%T) only.
- sleep: Delay the system for 1 second and show the time after every second.
To execute the script, the following command is used:
Example 4: Pause Bash Script Using for loop
The sleep command can be used with the for loop to run the loop after a specific time delay. For instance, to print the numbers after every 3 seconds using the for loop, the below command is used:
#!/bin/bash for i in do echo $i sleep 3s done echo "Task completed by $HOSTNAME"
To execute the above for loop bash script, use this command:
Conclusion
The sleep command adds the delay time in the bash script, which runs after specific time intervals such as seconds (s), minutes (m), hours (h), and days (d). This guide performs examples to create bash scripts that add 10 seconds delay to show output, 1 second delay to create a digital clock, and 3 seconds delay to print a number using the for-loop. This post has addressed the usage of the Linux sleep command to pause a bash script.
How do I pause my shell script for a second before continuing?
I have only found how to wait for user input. However, I only want to pause so that my while true doesn’t crash my computer. I tried pause(1) , but it says -bash: syntax error near unexpected token ‘1’ . How can it be done?
11 Answers 11
sleep .5 # Waits 0.5 second. sleep 5 # Waits 5 seconds. sleep 5s # Waits 5 seconds. sleep 5m # Waits 5 minutes. sleep 5h # Waits 5 hours. sleep 5d # Waits 5 days.
One can also employ decimals when specifying a time unit; e.g. sleep 1.5s
If you get an «invalid time interval» you might want to check for your end of line setting, if you created your script with a Windows tool your end of line is «CR LF», you need to change it for Linux which is «LF» only. (Actually the error should be self explicit: invalid time interval ‘1\r’ here you can see the extra \r from the \r\n)
read -p "Press enter to continue"
In Python (question was originally tagged Python) you need to import the time module
from time import sleep sleep(1)
For shell script is is just
Which executes the sleep command. eg. /bin/sleep
So while not the right way to do it, you can combine the python answer with Bash by using python -c «import time; time.sleep(1)» instead of sleep 1 🙂
@BerryM. — Takes about 1.2 seconds when I try it. Python doesn’t start up instantly — you need to account for that. Make it python -c «import time; time.sleep(0.8)» instead. But then we need to factor in how long python startup actually takes. You need to run this: date +%N; python -c «import time; time.sleep(0)»; date +%N to determine how many nanoseconds python is taking to start. But that also includes some overhead from running date. Run this date +%N; date +%N to find that overhead. Python’s overhead on my machine was actually closer to 0.14 seconds. So I want time.sleep(0.86) .
What is the Linux equivalent to DOS pause?
I have a Bash shell script in which I would like to pause execution until the user presses a key. In DOS, this is easily accomplished with the pause command. Is there a Linux equivalent I can use in my script?
10 Answers 10
user@host:~$ read -n1 -r -p "Press any key to continue. " key [. ] user@host:~$
The -n1 specifies that it only waits for a single character. The -r puts it into raw mode, which is necessary because otherwise, if you press something like backslash, it doesn’t register until you hit the next key. The -p specifies the prompt, which must be quoted if it contains spaces. The key argument is only necessary if you want to know which key they pressed, in which case you can access it through $key .
If you are using Bash, you can also specify a timeout with -t , which causes read to return a failure when a key isn’t pressed. So for example:
read -t5 -n1 -r -p 'Press any key in the next five seconds. ' key if [ "$?" -eq "0" ]; then echo 'A key was pressed.' else echo 'No key was pressed.' fi
Strictly speaking, that would be «Enter any non-NUL character to continue» . Some keys don’t send any character (like Ctrl . ) and some send more than one (like F1 , Home . ). bash ignores NUL characters.
Usually it’s a better idea to ask for a specific key like enter, space or Y. «ANY» can be confusing to some users, there is a TAB-key so why no ANY-key and for sure there are keys that are potentially dangerous like ESCAPE, CTRL, CMD, the power button, etc. This isn’t so relevant anymore today, because nowadays the console is usually only used by advanced computer users that will interpret «ANY key» correctly. The Apple 2 Design Manual, tough quite old, has an interesting section devoted to this subject (apple2scans.net/files/1982-A2F2116-m-a2e-aiiedg.pdf).
If you instead use the message Press a key to continue. then even novice users will be able to find the a key and press it ;o)
This will have issues with command | myscript.sh or myscript.sh | command . See this answer for a solution.
If anyone gets read: 1: read: Illegal option -n make sure to wrap your command in bash -c ‘command && command’ etc. as that error is likely from sh . I am doing this in a Lando wrapper command.
I use these ways a lot that are very short, and they are like @theunamedguy and @Jim solutions, but with timeout and silent mode in addition.
I especially love the last case and use it in a lot of scripts that run in a loop until the user presses Enter .
Commands
read -rsp $'Press enter to continue. \n'
read -rsp $'Press escape to continue. \n' -d $'\e'
read -rsp $'Press any key to continue. \n' -n 1 key # echo $key
read -rp $'Are you sure (Y/n) : ' -ei $'Y' key; # echo $key
read -rsp $'Press any key or wait 5 seconds to continue. \n' -n 1 -t 5;
read -rst 0.5; timeout=$? # echo $timeout
Explanation
-r specifies raw mode, which don’t allow combined characters like «\» or «^».
-s specifies silent mode, and because we don’t need keyboard output.
-p $’prompt‘ specifies the prompt, which need to be between $’ and ‘ to let spaces and escaped characters. Be careful, you must put between single quotes with dollars symbol to benefit escaped characters, otherwise you can use simple quotes.
-d $’\e‘ specifies escappe as delimiter charater, so as a final character for current entry, this is possible to put any character but be careful to put a character that the user can type.
-n 1 specifies that it only needs a single character.
-e specifies readline mode.
-i $’Y‘ specifies Y as initial text in readline mode.
-t 5 specifies a timeout of 5 seconds
key serve in case you need to know the input, in -n1 case, the key that has been pressed.
$? serve to know the exit code of the last program, for read, 142 in case of timeout, 0 correct input. Put $? in a variable as soon as possible if you need to test it after somes commands, because all commands would rewrite $?