Customize silent running processes with frame animations and text in Linux Bash shells.

Main Logo

Build Status
Build Status AppImage Build Status

Table of Contents


This Linux Bash command line utility can attach itself to any process by PID and run a custom animation of frames by string or array with the addition of prepended and appended text with the animation and the ability to change the speed of the animations by spreading the frames over seconds with the ‘-s’ switch (e.g. -s 3, spreads over 3 seconds). This is great for silent processes, especially in sub shells or scripts. This tool works with any color and otherformatting that can be used with printf.


I work in many shells for many reasons and not everything I do has verbose output (of course) and sometimes it’s nice to have something visual to represent what’s going on in the background. If for anything else, but to know if it’s still runing or not without having to type a command.


‘ProcSpin’ is a utility written specifially for the Bash environment in GNU/Linux and is dependant only on the utilities and libraries that are already provided in said environment.


This is a command line/shell/terminal/console utility written specifically for the Linux Bash environment and as such can be used in any method that you can use any other executable bin or script in said environment.

This program comes in 3 forms:

  1. A sourceable and executable script.
  2. A function that can be pull from the script.
  3. An executable AppImage.


The script can be sourced and used as a function (or the function can be stripped and used wherever you like) or it can be used by normal script execution. Sourcing the script provides Bash Completion.

You can, of course, name the script to anything you like.

Sourceable Script

To source the files and use the function with Bash Completion:

Dot Method
 $ . /path/to/procspin.bash


Source Method
 $ source /path/to/procspin.bash
Sourced Function Example

Then use the function with Bash Completion in your terminal:

# Run silent sub-shell command with the default spiner, but added text.
(silent_command_script_or_executable) & procspin $! -p " prepended text [" -a "] "

Executable Script

No Bash Completion unless you copy the completion code into your own configs from my provided ‘complete’ code in the script.

# Run silent sub-shell command with the default spiner, but added text.
(silent_command_script_or_executable) & ./procspin.bash $! -p " prepended text [" -a "] "


The AppImage is only executable and used exactly like the executable script above. All AppImages can be renamed to something easier and especially removing the .AppImage extension. This is just another delivery method in which some people prefer.

Executable AppImage

# Run silent sub-shell command with the default spiner, but added text.
(silent_command_script_or_executable) & ./procspin-x86_64.AppImage $! -p " prepended text [" -a "] "


Parameter Type Description
PID Integer The process id to attach to.
Switch String Any of the Parameter Switches below.

Parameter PID

Example Description
2345 (any integer) Direct PID
$$ PID of current shell.
$! PID of last ran process/sub-shell.

Parameter Switches

|Switch|Switch - Alt|Description| |:—:|:—:|:—:| |-h|–help|This help message.| |-f|–frames|STRING or ARRAY of animation frames.| |-p|–prepend|STRING to prepend to spinner.| |-a|–append|STRING to append to spinner.| |-s|–spread|Time in INTEGER seconds to spread frames over.|

Bash Completion

As stated above Bash Completion is provided when sourcing the script, but it can also be added to any of your ‘profile’ or ‘dot’ configs by pasting the following code (or from the script) into your own files.

    complete -W "-h --help -a --append -p --prepend -s --spread" procspin

Animation Frames

This comes with a default animation embedded as an array in the main function, but with the -f,--frames switch you can use your own set from a string or array of your own characters. These can be single or multiple characters usually using spaces to as empty space where there’s not character at that specific frame as I will show you in the example. When using multi-character animations I recommend using arrays of strings rather than trying to format a long string. I really recommend using arrays at all times, but you do what you like, of course.

NOTE: These default frames may or may not display in some browsers or in a small amount of terminals, but they work in most places and can easily be changed in both the function and by providing your own.

Default Animation Frames Example

array=('' '' '' '' '' '' '' '' '' '' '' \
				'' '' '' '' '' '' '' '' '' '' '' '' '' '')

Moving Arrows Animation Frames Example

'▶               '\
,' ▶              '\
,'  ▶             '\
,'   ▶            '\
,'    ▶           '\
,'     ▶          '\
,'      ▶         '\
,'       ▶        '\
,'        ▶       '\
,'         ▶      '\
,'          ▶     '\
,'           ▶    '\
,'            ▶   '\
,'             ▶  '\
,'              ▶ '\
,'               ▶')


Silently run find to log all files to a file with a custom animation with the above frames (after enabling sudo with some other command, of course):

 $ (sudo find / > ~/files.log 2>/dev/null) & procspin $! -p " <~ Running 'find'... ~> [" -a "] " -f "${frame_array[@]}"
[4] 53354
 <~ Running 'find'... ~> [               ▶]


The best thing to do is to choose the script or AppImage from the ‘Continuous Release” page as that should be the most updated versions of each, but the files from the ‘Direct Links’ should reflect the same versions.

What Link
Continuous Release - Recommended
This Repo - Themed
This Repo
File Description
procspin.bash Main Bash script.
procspin-x86_64.AppImage AppImage format.


Help Message

Help Message






Link Description
ProcSpin Demo 1 My special APT Update script.
ProcSpin Demo 1 Random demonstration.


This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.