Browse Source

ConsoleIO::askAndHideAnswer - added support for zsh, ksh and csh shells.

Smasty 12 years ago
parent
commit
bd83eb93bf
1 changed files with 11 additions and 3 deletions
  1. 11 3
      src/Composer/IO/ConsoleIO.php

+ 11 - 3
src/Composer/IO/ConsoleIO.php

@@ -162,10 +162,18 @@ class ConsoleIO implements IOInterface
             return $value;
         }
 
-        // handle other OSs with bash if available to hide the answer
-        if ('OK' === rtrim(shell_exec("/usr/bin/env bash -c 'echo OK'"))) {
+        // handle other OSs with bash/zsh/ksh/csh if available to hide the answer
+        $test = "/usr/bin/env %s -c 'echo OK' 2> /dev/null";
+        foreach(array('bash', 'zsh', 'ksh', 'csh') as $sh){
+            if('OK' === rtrim(shell_exec(sprintf($test, $sh)))){
+                $shell = $sh;
+                break;
+            }
+        }
+        if(isset($shell)){
             $this->write($question, false);
-            $command = "/usr/bin/env bash -c 'read -s mypassword && echo \$mypassword'";
+            $readCmd = ($shell === 'csh') ? 'set mypassword = $<' : 'read mypassword';
+            $command = sprintf("/usr/bin/env %s -c 'stty -echo; %s; stty echo; echo \$mypassword'", $shell, $readCmd);
             $value = rtrim(shell_exec($command));
             $this->write('');