Better handling of executables.
diff --git a/src/cmd/file.c b/src/cmd/file.c
index fb3d2a3..ce739d0 100644
--- a/src/cmd/file.c
+++ b/src/cmd/file.c
@@ -637,8 +637,6 @@
 	"!<arch>\n__.SYMDEF",	"archive random library",	16,	"application/octet-stream",
 	"!<arch>\n",		"archive",			8,	"application/octet-stream",
 	"070707",		"cpio archive - ascii header",	6,	"application/octet-stream",
-	"#!/bin/rc",		"rc executable file",		9,	"text/plain",
-	"#!/bin/sh",		"sh executable file",		9,	"text/plain",
 	"%!",			"postscript",			2,	"application/postscript",
 	"\004%!",		"postscript",			3,	"application/postscript",
 	"x T post",		"troff output for post",	8,	"application/troff",
@@ -668,7 +666,7 @@
 int
 istring(void)
 {
-	int i;
+	int i, j;
 	struct FILE_STRING *p;
 
 	for(p = file_string; p->key; p++) {
@@ -690,6 +688,17 @@
 			print("%.*s picture\n", utfnlen((char*)buf+5, i-5), (char*)buf+5);
 		return 1;
 	}
+	if(buf[0]=='#' && buf[1]=='!'){
+		i=2;
+		for(j=2; j < nbuf && buf[j] != ' ' && buf[j] != '\n' && buf[j] != '\r'; j++)
+			if(buf[j] == '/')
+				i = j+1;
+		if(mime)
+			print(PLAIN);
+		else
+			print("%.*s executable file script\n", utfnlen((char*)buf+i, j-i), (char*)buf+i);
+		return 1;
+	}
 	return 0;
 }
 
@@ -1245,7 +1254,7 @@
 	};
 
 
-	if (memcmp(buf, "\0177ELF", 4) == 0){
+	if (memcmp(buf, "\177ELF", 4) == 0){
 		/* gcc misparses \x7FELF as \x7FE L F */
 		if (!mime){
 			int n = (buf[19] << 8) | buf[18];