Next drop of toysh, plus more infratructure.
diff --git a/main.c b/main.c
index 90d80c7..57fb7f4 100644
--- a/main.c
+++ b/main.c
@@ -17,6 +17,7 @@
 	{"cd", cd_main, TOYFLAG_NOFORK},
 	{"df", df_main, TOYFLAG_USR|TOYFLAG_SBIN},
 	{"exit", exit_main, TOYFLAG_NOFORK},
+	{"sh", toysh_main, TOYFLAG_BIN},
 	{"toysh", toysh_main, TOYFLAG_BIN}
 };
 
@@ -51,6 +52,16 @@
 	}
 }
 
+void toy_init(struct toy_list *which, char *argv[])
+{
+	// Free old toys contents here?
+
+	toys.which = which;
+	toys.argv = argv;
+	for (toys.argc = 0; argv[toys.argc]; toys.argc++);
+	toys.exitval = 1;
+}
+
 // Run a toy.
 void toy_exec(char *argv[])
 {
@@ -59,12 +70,7 @@
 	which = toy_find(argv[0]);
 	if (!which) return;
 
-	// Free old toys contents here?
-
-	toys.which = which;
-	toys.argv = argv;
-	for (toys.argc = 0; argv[toys.argc]; toys.argc++);
-	toys.exitval = 1;
+	toy_init(which, argv);
 	
 	exit(toys.which->toy_main());
 }