Are there terms that are used to describe what kind of command line program you are programming based on how the program is designed to interact with the user?
For example, I can write a program that
a.) gets invoked from the command line with optional parameters, executes, and then immediately returns control back to the shell. (i.e ls)
b.) gets invoked and then waits for the user to make certain decisions as part of a workflow, before continuing execution and exiting. (i.e. ssh-keygen)
c.) gets invoked and then begins mimicking a shell, expecting the user to type in commands to execute and has a separate exit call to return to the the shell (i.e. mysql, NodeJS or Python REPL)
d.) fully takes over the window, mimics an application and doesn't leave a history of commands in the shell (i.e. vim)
Historically, have software developers come up with terms for classifying these kinds of programs or have they all been grouped together as "command line interfaces"?
Based on scriptin's comment about this potentially being more about properties of software rather than overall classification, here is another way to phrase this question-
Say I am writing a set of tutorials to teach a student a programming or scripting language, starting from a "Hello world" example to a fully useful application and the above cases are treated as separate tutorials. Are there non-subjective terms to describe the concepts, features and behaviors I am asking the student to learn how to program in each of the cases? In other words, what would I title those tutorials?