Node.js在Windows上的Git Bash shebang失败

Node.js on Windows Git Bash shebang failure

本文关键字:Bash shebang 失败 Git 上的 js Windows Node      更新时间:2023-09-26

Windows Git Bash特定问题。。。

非常简单的脚本,它接受一些用户输入,并且不将其回显到输出。像node secret.js一样调用时工作正常,但当像./secret.js一样调用时行为奇怪,需要ctrl+c退出,并在键入时回显输出。

#!/usr/bin/env node
var prompt = require('prompt');
prompt.start();
prompt.colors = false;
prompt.message = '';
prompt.delimiter = ''; 
prompt.get([{
  name: 'secret',
  description: 'tell me your darkest secret: ',
  hidden: true
}], function(err, result){
    console.log('Hey guys! He said "' + result.secret.slice(0, 5) + '..." only kidding, I won''t tell.');
});

让脚本在包括gitbash在内的所有平台上运行的安全方法是什么?

更新:添加了env结果,以防有用。。。

IEUser@ie8winxp MINGW32 ~/projects/issue (develop)
$ env
HOMEPATH='Documents and Settings'IEUser
MANPATH=/mingw32/share/man:/usr/local/man:/usr/share/man:/usr/man:/share/man:
APPDATA=C:'Documents and Settings'IEUser'Application Data
HOSTNAME=ie8winxp
SHELL=/usr/bin/bash
TERM=xterm
PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel
WINDIR=C:'WINDOWS
TMPDIR=/tmp
OLDPWD=/c/Documents and Settings/IEUser/projects
USERDOMAIN=IE8WINXP
OS=Windows_NT
ALLUSERSPROFILE=C:'Documents and Settings'All Users
TEMP=/tmp
COMMONPROGRAMFILES=C:'Program Files'Common Files
USERNAME=IEUser
PROCESSOR_LEVEL=6
PATH=C:'Documents and Settings'IEUser'projects'issuemd'node_modules'.bin:C:'Documents and Settings'IEUser'projects'issue'node_modules'.bin:C:'Documents and Settings'IEUser'projects'node_modules'.bin:/c/Documents and Settings/IEUser/bin:/mingw32/bin:/usr/local/bin:/usr/bin:/bin:/mingw32/bin:/usr/bin:/c/Documents and Settings/IEUser/bin:/c/WINDOWS/system32:/c/WINDOWS:/c/WINDOWS/System32/Wbem:/c/Program Files/nodejs:/c/Documents and Settings/IEUser/Application Data/npm:/usr/bin/vendor_perl:/usr/bin/core_perl
EXEPATH=C:'Program Files'Git
FP_NO_HOST_CHECK=NO
PWD=/c/Documents and Settings/IEUser/projects/issue
SYSTEMDRIVE=C:
LANG=en_US.UTF-8
USERPROFILE=C:'Documents and Settings'IEUser
CLIENTNAME=Console
PS1='['033]0;$TITLEPREFIX:${PWD//[^[:ascii:]]/?}'007']'n'['033[32m']'u@'h '['033[35m']$MSYSTEM '['033[33m']'w'['033[36m']`__git_ps1`'['033[0m']'n$
LOGONSERVER=''IE8WINXP
PROCESSOR_ARCHITECTURE=x86
SSH_ASKPASS=/mingw32/libexec/git-core/git-gui--askpass
SHLVL=1
HOME=/c/Documents and Settings/IEUser
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PLINK_PROTOCOL=ssh
HOMEDRIVE=C:
MSYSTEM=MINGW32
COMSPEC=C:'WINDOWS'system32'cmd.exe
TMP=/tmp
SYSTEMROOT=C:'WINDOWS
PROCESSOR_REVISION=170a
PKG_CONFIG_PATH=/mingw32/lib/pkgconfig:/mingw32/share/pkgconfig
ACLOCAL_PATH=/mingw32/share/aclocal:/usr/share/aclocal
INFOPATH=/usr/local/info:/usr/share/info:/usr/info:/share/info:
PROGRAMFILES=C:'Program Files
DISPLAY=needs-to-be-defined
NUMBER_OF_PROCESSORS=1
SESSIONNAME=Console
COMPUTERNAME=IE8WINXP
_=/usr/bin/env

发现节点不支持cygwin(我认为git-bash也是)。

看来gitbash不是一个真正的tty。

看来有人把winpty和gitbash捆绑在一起做了些什么。

解决方案

git bash中,运行winpty bash,然后其余部分应按预期工作。