#!/bin/sh kazinator 1 day ago [-] Here is my version: #!/bin/bash printf "REPL for %s\n" "$@" notblank() { [ $# -gt 0 ] } while true ; do printf "%s> " "$@" read -r || break; notblank $REPLY || continue; eval command \"\$@\" "$REPLY" done We keep the original parameters and expand them with "$@". There is a Bash feature that read with no args reads the line into the REPLY variable. We want that to be subject to splitting. If $REPLY expands to nothing, including multiple whitespace, then we just want to print the prompt again: not quit and not run the command with no additional arguments. The eval trick allows $REPLY to undergo expansion and splitting, so that shell syntax can freely be used in the REPL. Test: $ ~/test/replify/replify.sh git REPL for git git> rev-parse HEAD 7ac594319e417266764a6bc041b74807f2fe13bd git> branch -r origin/HEAD -> origin/master origin/master origin/origin/master git> checkout "$TERM $TERM" error: pathspec 'xterm xterm' did not match any file(s) known to git. git> checkout $TERM error: pathspec 'xterm' did not match any file(s) known to git. Cute, but not terribly useful without history recall and related features. This wants to be a feature of Bash. The regular Bash repl should have a prefix variable so it can appear to be in a sub-mode for a particular command. Submit a patch for Bash to do this, and maybe you have something. Bash has a hook feature for command execution, IIRC, so this may be somehow doable without modifying Bash. https://news.ycombinator.com/item?id=12322035