diff --git a/bin/prettier.js b/bin/prettier.js
index <HASH>..<HASH> 100755
--- a/bin/prettier.js
+++ b/bin/prettier.js
@@ -33,6 +33,13 @@ if (!filenames.length && !stdin) {
   process.exit(1);
 }
 
+function formatWithShebang(input) {
+  const index = input.indexOf("\n");
+  const shebang = input.slice(0, index + 1);
+  const programInput = input.slice(index + 1);
+  return shebang + format(programInput);
+}
+
 function format(input) {
   return jscodefmt.format(input, {
     printWidth: argv["print-width"],
@@ -70,7 +77,7 @@ if (stdin) {
 
       let output;
       try {
-        output = format(input);
+        output = input.startsWith("#!") ? formatWithShebang(input) : format(input);
       } catch (e) {
         process.exitCode = 2;
         console.error(e);
treat shebang outside of parsing (#<I>)

* treat shebang outside of parsing



* use less costly indexOf and reuse format function



* avoid reprinting new line and potential double space at start



* move options back to format function