Skip to content

Simple pause script that interrupts a program until either any key is pressed or the optional timer (-t, --timer) reaches 00. Prompt text entry (-p, --prompt) and response (-r, --response) text entry options allow for customization.

License

Notifications You must be signed in to change notification settings

Grawmpy/pause.sh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

92 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pause.sh

Current release: https://github.com/Grawmpy/pause.sh/releases

This utility is a high-precision synchronous process interrupter designed for secure Linux environments. It features Monotonic Timing Accuracy via internal shell parameters to eliminate cumulative drift during extended countdowns. Security is maintained through Mandatory TTY Validation and Strict Input Sanitization, which renders all incoming ANSI escape sequences as literals, mitigating potential side-channel attacks on the host terminal session. It is a high-precision synchronous process interrupter designed for secure Linux environments. It features Monotonic Timing Accuracy via internal shell parameters to eliminate cumulative drift during extended countdowns. Security is maintained through Mandatory TTY Validation and Strict Input Sanitization, which renders all incoming ANSI escape sequences as literals, mitigating potential side-channel attacks on the host terminal session.

Core Functionality: Asynchronous Event Handling

The utility operates as a Synchronous Blocking Process, suspending the parent thread until termination criteria are met. Execution resumes upon the detection of a Non-Escape Character Input (Alphanumeric, Space, or Carriage Return) or the expiration of the optional Monotonic Countdown Timer.

Precision Timing: Monotonic Clock Implementation

To ensure high-fidelity temporal accuracy, the utility utilizes a Monotonic Reference Counter. By calculating elapsed time via internal shell state variables rather than standard system clock calls, the script eliminates cumulative drift and fork-exec overhead. This architecture guarantees Zero-Lag Synchronization over extended durations (exceeding 24 hours), remaining resilient against system clock shifts or NTP adjustments.

Dynamic Visual Interface

The interface features a Hierarchical Time Display that dynamically manages its footprint. The countdown utilizes a context-aware [YY:MM:DD:HH:MM:SS] format, where higher-order time units automatically undergo Visual Pruning (hiding) as they reach zero, culminating in a minimalist [SS] final state.

Security Hardening & Input Sanitization

The utility is architected for Execution Isolation and Environment Integrity:

Mandatory TTY Validation: Starting in Version 6, the script enforces Interactive TTY Session Residency, rejecting piped or non-seekable streams to prevent unauthorized side-channel manipulation. Escape Sequence Neutralization: All string-based arguments (Prompt and Response) undergo Recursive Sanitization. The utility literalizes all ASCII control characters (0-31, 127) and explicitly strips the ESC (\x1b) character to mitigate Terminal Escape Injection (TEI) vulnerabilities. Atomic Character Capture: Input is captured in a Non-Canonical Raw Mode, ensuring special keys or escape sequences cannot be leveraged for command injection.

CLI Configuration and Output Stream Management

Quiet Mode (-q): Provides Visual Suppression, decoupling the process pause from terminal output for "silent" operations. In v6, this has been refactored for Standalone Orthogonality, removing the legacy timer dependency. Stream Routing: Prompt/Response (-p, -r): These strings are directed to STDERR, ensuring that user-facing instructions do not interfere with data being processed on the primary output stream. Echo Toggle (-e): Enables Standard Output (STDOUT) Redirection, allowing for Atomic Command Substitution. This feature enables the utility to populate parent-shell variables during execution—a functionality gap identified in legacy DOS/Windows environments.

Architectural Philosophy: Dependency-Free Shell Native

Designed as an Environment-Agnostic Utility, the script is written exclusively using Bash Built-in Primitives. This ensures Zero-Dependency Portability and maximum performance across all POSIX-compliant environments, making it immune to variations in host binary toolsets (such as GNU Coreutils) and ensuring high-speed execution with Zero Subshell Latency.

  Usage:
  $ ./pause.sh [-e, --echo] [-h|--help] [-p|--prompt "<TEXT>"] [-q|--quiet ] [-r|--response "<TEXT>"]  [-t|--timer <SECONDS>] [-v, --version] 
  
  -e, --echo      
     echoes the key presse. Directed to STDOUT 
  -h, --help 
     help information 
  -q, --quiet     
     quiets all prompt text, (v.5 requires timer be set.) 
  -p, --prompt  
     text string required (string must be in quotes). Directed to STDERR
  -r, --response  
     text string required (string must be in quotes). Directed to STDERR 
  -t, --timer 
     delay in total number of seconds
  -v. --version
     Current version

  Examples:
  Input:  $ pause.sh
  Output: $ Press [Enter] to continue...
         $
  
  Input:  $ pause.sh --timer <seconds>
  Output: $ [timer] Press [Enter] to continue...
         $
  
  Input:  $ pause.sh --prompt "Optional Prompt" --response "Your response"
  Output: $ Optional Prompt
         $ Your Response
         $
  
  Input:  $ pause.sh -p "Optional Prompt" -r "[ Your response ]" -t <seconds>
  Output: $ [timer] Optional Prompt
         $ [ Your Response ]
         $
  [format of time will be 00:00:00]
  
  Input:  $ pause.sh -e
  Output: $ Press [Enter] to continue... (Presses "j" key}
         $ j
         $
    

    Note: quiet mode (-q|--quiet) will hide all output except response (-r|--response) text, 
    if given, until contiuation of process.
          
    Code will work inside command substitution to allow for populating variables within a script.

About

Simple pause script that interrupts a program until either any key is pressed or the optional timer (-t, --timer) reaches 00. Prompt text entry (-p, --prompt) and response (-r, --response) text entry options allow for customization.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages