Ci sono termini che vengono usati per descrivere che tipo di programma da riga di comando si sta programmando in base a come il programma è progettato per interagire con l'utente?
Ad esempio, posso scrivere un programma che
a.) viene richiamato dalla riga di comando con parametri facoltativi, viene eseguito e quindi restituisce immediatamente il controllo alla shell. (i.e ls)
b.) viene richiamato e quindi attende che l'utente prenda determinate decisioni come parte di un flusso di lavoro, prima di continuare l'esecuzione e uscire. (ad esempio ssh-keygen)
c.) viene invocato e quindi inizia a mimare una shell, aspettandosi che l'utente digiti i comandi da eseguire e abbia una chiamata di uscita separata per tornare alla shell (cioè mysql, NodeJS o REPL Python)
d.) prende completamente il controllo della finestra, imita un'applicazione e non lascia una cronologia dei comandi nella shell (cioè vim)
Storicamente, gli sviluppatori di software hanno trovato i termini per classificare questi tipi di programmi o sono stati tutti raggruppati come "interfacce della riga di comando"?
Aggiornamento:
Sulla base del commento di scriptin su questo potenzialmente più sulle proprietà del software piuttosto che sulla classificazione generale, ecco un altro modo per esprimere questa domanda -
Dire che sto scrivendo un set di tutorial per insegnare a uno studente un linguaggio di programmazione o di scripting, partendo da un esempio di "Hello world" a un'applicazione completamente utile e i casi sopra descritti sono trattati come tutorial separati. Ci sono dei termini non soggettivi per descrivere i concetti, le caratteristiche e i comportamenti che sto chiedendo allo studente di imparare come programmare in ciascuno dei casi? In altre parole, quale sarebbe il titolo di quei tutorial?