防止 cygwin bash 在 shebang 上记录错误
Prevent cygwin bash from logging error on shebang
当从 Windows 命令提示符在 cygwin 中执行 运行 bash 脚本时,我总是在第 1 行遇到错误,即使脚本正确运行也是如此
C:\ImageMagickWatchFolder>bash .\whitebalance
.\whitebalance: line 1: #!/bin/bash: No such file or directory
... (rest of script output)
(whitebalance
是脚本的文件名)
我已尝试将脚本的第 1 行替换为
#!/cygdrive/c/cygwin64/bash
#!bash
#!C:\cygwin64\bin\bash
#!C:\cygwin64\bin\bash
等等,只是完全消除它,都无济于事。 (有些给出 No such file or directory
,有些给出 command not found
)。特别是,第一行为空,它给出
C:\ImageMagickWatchFolder>bash .\whitebalance
.\whitebalance: line 1: $'737': command not found
我也尝试将行结束样式从 unix 切换到 windows,但这只会让事情变得更糟。
下面第一条评论:
C:\ImageMagickWatchFolder>head -n 2 whitebalance | cat -A
M-oM-;M-?#!/bin/bash$
coords=""$
从这里无法判断,但发生这种情况的一种常见方式是行尾。确保您的脚本没有 \r\n
(Windows 样式)行尾。 bash
会忽略这些,但 shebang 仍然不起作用:它会尝试查找 /bin/bash\r
,但失败了。
想通了。我一直在 Notepad++ 中以 UTF-8-BOM 编码保存脚本。当更改为 UTF-8 或 ANSI 时,错误不再出现。
当从 Windows 命令提示符在 cygwin 中执行 运行 bash 脚本时,我总是在第 1 行遇到错误,即使脚本正确运行也是如此
C:\ImageMagickWatchFolder>bash .\whitebalance
.\whitebalance: line 1: #!/bin/bash: No such file or directory
... (rest of script output)
(whitebalance
是脚本的文件名)
我已尝试将脚本的第 1 行替换为
#!/cygdrive/c/cygwin64/bash
#!bash
#!C:\cygwin64\bin\bash
#!C:\cygwin64\bin\bash
等等,只是完全消除它,都无济于事。 (有些给出 No such file or directory
,有些给出 command not found
)。特别是,第一行为空,它给出
C:\ImageMagickWatchFolder>bash .\whitebalance
.\whitebalance: line 1: $'737': command not found
我也尝试将行结束样式从 unix 切换到 windows,但这只会让事情变得更糟。
下面第一条评论:
C:\ImageMagickWatchFolder>head -n 2 whitebalance | cat -A
M-oM-;M-?#!/bin/bash$
coords=""$
从这里无法判断,但发生这种情况的一种常见方式是行尾。确保您的脚本没有 \r\n
(Windows 样式)行尾。 bash
会忽略这些,但 shebang 仍然不起作用:它会尝试查找 /bin/bash\r
,但失败了。
想通了。我一直在 Notepad++ 中以 UTF-8-BOM 编码保存脚本。当更改为 UTF-8 或 ANSI 时,错误不再出现。