How do I pause my shell script for a second before continuing?

BashShellUnix

Bash Problem Overview


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?

Bash Solutions


Solution 1 - Bash

Use the sleep command.

Example:

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

Solution 2 - Bash

And what about:

read -p "Press enter to continue"

Solution 3 - Bash

In Python (question was originally tagged Python) you need to import the time module

import time
time.sleep(1)

or

from time import sleep
sleep(1)

For shell script is is just

sleep 1

Which executes the sleep command. eg. /bin/sleep

Solution 4 - Bash

Run multiple sleeps and commands

sleep 5 && cd /var/www/html && git pull && sleep 3 && cd ..

This will wait for 5 seconds before executing the first script, then will sleep again for 3 seconds before it changes directory again.

Solution 5 - Bash

I realize that I'm a bit late with this, but you can also call sleep and pass the disired time in. For example, If I wanted to wait for 3 seconds I can do:

/bin/sleep 3

4 seconds would look like this:

/bin/sleep 4

Solution 6 - Bash

On Mac OSX, sleep does not take minutes/etc, only seconds. So for two minutes,

sleep 120

Solution 7 - Bash

Within the script you can add the following in between the actions you would like the pause. This will pause the routine for 5 seconds.

read -p "Pause Time 5 seconds" -t 5
read -p "Continuing in 5 Seconds...." -t 5
echo "Continuing ...."

Solution 8 - Bash

read -r -p "Wait 5 seconds or press any key to continue immediately" -t 5 -n 1 -s

To continue when you press any one button

for more info check read manpage ref 1, ref 2

Solution 9 - Bash

You can make it wait using $RANDOM, a default random number generator. In the below I am using 240 seconds. Hope that helps @

> WAIT_FOR_SECONDS=`/usr/bin/expr $RANDOM % 240` /bin/sleep
> $WAIT_FOR_SECONDS

Solution 10 - Bash

use trap to pause and check command line (in color using tput) before running it

trap 'tput setaf 1;tput bold;echo $BASH_COMMAND;read;tput init' DEBUG

press any key to continue

> use with set -x to debug command line

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser3268208View Question on Stackoverflow
Solution 1 - BashRydallCooperView Answer on Stackoverflow
Solution 2 - BashVontonView Answer on Stackoverflow
Solution 3 - BashJohn La RooyView Answer on Stackoverflow
Solution 4 - BashRobot BoyView Answer on Stackoverflow
Solution 5 - Bashpcmaster574View Answer on Stackoverflow
Solution 6 - BashAnneTheAgileView Answer on Stackoverflow
Solution 7 - BashJose H. RosaView Answer on Stackoverflow
Solution 8 - BashOle LukøjeView Answer on Stackoverflow
Solution 9 - BashBalaji Boggaram RamanarayanView Answer on Stackoverflow
Solution 10 - BashAkhilView Answer on Stackoverflow