How do I pause my shell script for a second before continuing?
Categories:
How to Pause Your Shell Script for a Specific Duration

Learn various methods to introduce pauses or delays in your Bash and Unix shell scripts, ensuring proper timing for operations, resource availability, or user interaction.
Pausing a shell script is a common requirement in many automation tasks. Whether you need to wait for a service to start, allow a file to be processed, or simply introduce a delay for readability, understanding how to effectively pause your script is crucial. This article explores several robust methods to achieve this in Bash and other Unix-like shells, focusing on the sleep
command and other alternatives.
The sleep
Command: Your Primary Tool
The sleep
command is the most straightforward and widely used method for pausing a shell script. It suspends execution for a specified period. The command is part of the GNU Core Utilities and is available on virtually all Unix-like systems, including Linux and macOS.
# Pause for 1 second
sleep 1
# Pause for 0.5 seconds (requires floating-point support)
sleep 0.5
# Pause for 5 seconds
sleep 5
# Pause for 1 minute
sleep 1m
# Pause for 2 hours
sleep 2h
# Pause for 3 days
sleep 3d
Basic usage of the sleep
command with various time units.
sleep
can accept floating-point numbers for sub-second delays (e.g., sleep 0.5
), this functionality might not be available in older or more minimal sleep
implementations. For maximum portability with sub-second delays, consider using usleep
or nanosleep
if available, or looping with a very short sleep
and a counter.flowchart TD A[Start Script] --> B{Operation 1} B --> C["Wait for 1 second (sleep 1)"] C --> D{Operation 2} D --> E["Wait for 0.5 seconds (sleep 0.5)"] E --> F{Operation 3} F --> G[End Script]
A simple script flow demonstrating the use of sleep
between operations.
Advanced Pausing Techniques and Alternatives
Beyond the basic sleep
command, there are scenarios where you might need more control or different pausing mechanisms. These include waiting for specific conditions, user input, or using alternative commands for finer-grained control.
# Wait for a file to exist before proceeding
FILE="/tmp/my_temp_file.txt"
while [ ! -f "$FILE" ]; do
echo "Waiting for $FILE to appear..."
sleep 2
done
echo "$FILE found! Continuing..."
# Wait for a process to finish
# (Replace 'my_long_process' with actual process name/ID)
# This is a simplified example; robust process waiting is more complex.
# For example, using 'wait' command with background processes.
# Or checking 'ps' output.
# Example: wait for a background job to complete
( long_running_command & ) # Run in background
PID=$!
while ps -p $PID > /dev/null; do
echo "Process $PID is still running..."
sleep 5
done
echo "Process $PID finished."
Script examples demonstrating waiting for a file or a process.
sleep
). Busy-waiting consumes CPU cycles unnecessarily. Always include a sleep
command within your while
loops to periodically check the condition without hogging resources.Interactive Pauses and User Input
Sometimes, you might want to pause a script until the user explicitly presses a key. This is useful for displaying information, allowing the user to read output, or confirming an action before proceeding.
# Pause until user presses Enter
echo "Press Enter to continue..."
read -r
echo "Continuing script..."
# Pause for a specific key press (more advanced, requires 'read -n 1')
echo "Press 'y' or 'n' to continue..."
read -r -n 1 KEY
if [[ "$KEY" == "y" || "$KEY" == "Y" ]]; then
echo -e "\nUser chose Yes. Proceeding."
else
echo -e "\nUser chose No. Exiting."
exit 1
fi
Using read
to pause for user input.
flowchart TD A[Start Script] --> B{Display Info} B --> C["Prompt User (read -r)"] C -- User Presses Enter --> D{Continue Operations} C -- User Exits --> E[Exit Script] D --> F[End Script]
Flowchart for an interactive script pause awaiting user input.