Index: uspace/app/bdsh/input.c
===================================================================
--- uspace/app/bdsh/input.c	(revision 59ecd4a3b0bd29d1e4c177ddfdbd67f9774eb336)
+++ uspace/app/bdsh/input.c	(revision 5db9084cb9b925c6758f4bc0fac5c31d7125ff35)
@@ -50,4 +50,6 @@
 #include "errors.h"
 #include "exec.h"
+
+extern volatile unsigned int cli_quit;
 
 /** Text input field. */
@@ -107,4 +109,5 @@
 {
 	char *str;
+	int rc;
 
 	fflush(stdout);
@@ -114,5 +117,16 @@
 	console_set_style(fphone(stdout), STYLE_NORMAL);
 
-	str = tinput_read(tinput);
+	rc = tinput_read(tinput, &str);
+	if (rc == ENOENT) {
+		/* User requested exit */
+		cli_quit = 1;
+		putchar('\n');
+		return;
+	}
+
+	if (rc != EOK) {
+		/* Error in communication with console */
+		return;
+	}
 
 	/* Check for empty input. */
Index: uspace/app/bdsh/scli.c
===================================================================
--- uspace/app/bdsh/scli.c	(revision 59ecd4a3b0bd29d1e4c177ddfdbd67f9774eb336)
+++ uspace/app/bdsh/scli.c	(revision 5db9084cb9b925c6758f4bc0fac5c31d7125ff35)
@@ -100,7 +100,7 @@
 		}
 	}
-	goto finit;
 
-finit:
+	printf("Leaving %s.\n", progname);
+
 	cli_finit(&usr);
 	return ret;
Index: uspace/app/sbi/src/os/helenos.c
===================================================================
--- uspace/app/sbi/src/os/helenos.c	(revision 59ecd4a3b0bd29d1e4c177ddfdbd67f9774eb336)
+++ uspace/app/sbi/src/os/helenos.c	(revision 5db9084cb9b925c6758f4bc0fac5c31d7125ff35)
@@ -105,4 +105,5 @@
 {
 	char *line;
+	int rc;
 
 	if (tinput == NULL) {
@@ -112,7 +113,15 @@
 	}
 
-	line = tinput_read(tinput);
-	if (line == NULL)
+	rc = tinput_read(tinput, &line);
+	if (rc == ENOENT) {
+		/* User-requested abort */
+		*ptr = os_str_dup("");
+		return EOK;
+	}
+
+	if (rc != EOK) {
+		/* Error in communication with console */
 		return EIO;
+	}
 
 	/* XXX Input module needs trailing newline to keep going. */
