【问题标题】:Shell Script not running properly on Git-Bash for WindowsShell 脚本在 Windows 的 Git-Bash 上无法正常运行
【发布时间】:2015-12-10 20:30:35
【问题描述】:

我有 git for windows 2.5.2(64 位版本),下载自:https://git-scm.com/download/win

我只想创建一个 .sh 来为我提交/推送我的工作。我编写了脚本,当我尝试运行它时,出现如下错误:

"#!/bin/sh: 没有这样的文件或目录"

如您所见,我为我的 git-bash 和我的 git-sh(也为我的 sh.exe 和我的 bash.exe)设置了路径

PATH-> "C:\Program Files\Git\bin\;C:\Program Files\Git\mingw64\;"

我也有我的 ~/.bash_profile:

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

我的~/.profile:

#!/bin/sh.exe
#
# Get the aliases and functions
#

if [ -f ${HOME}/.bashrc ]
then
  . ${HOME}/.bashrc
fi

  export CVS_RSH="ssh"
  export EDITOR="/usr/bin/vim"
  export HISTSIZE="500"
  export PATH="${HOME}/bin:${PATH}"

还有我的简单 script.sh:

#!/bin/sh.exe

P_J="Le/Prjt/swks/games"
GITLAB_USER='myuser'
GITLAB_PASSWORD='mypass'
P_JG='G Select'
NAME_OF_REP='g-select'

cd $P_J || EXIT
cd "$P_JG" || EXIT
#git add -A
#git commit -m "$(date)"
#git push https://$GITLAB_USER:$GITLAB_PASSWORD@gitlab.com/$GITLAB_USER/$NAME_OF_REP.git

在我的 Git-Bash 中,这是一个“echo $PATH”:

$ echo $PATH /c/Users/UserP/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/ProgramData/Oracle/Java/javapath:/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/Program Files/Java/jre1.8.0_51/bin:/c/Program Files (x86)/Android/android-sdk/platform-tools:/bin:/mingw64:/usr/bin/vendor_perl:/usr/bin/core_perl

正如我所说,当打开 git-bash 并运行我的简单 .sh 时,我得到了这个错误:

./script.sh: line 1: #!/bin/sh.exe: 没有那个文件或目录

问题似乎出在我的 shellscript 上创建变量时。有没有人知道可能导致此问题的原因?

提前致谢!

【问题讨论】:

  • 我不明白为什么它在第 1 行失败,但你的每一个变量赋值看起来都是错误的;在 Bourne shell 脚本中,您不能= 运算符周围插入任意空格。它必须VARNAME=VALUE,没有未加引号的空格任何地方,(并且加引号空格只允许 @987654328 @)。
  • 我从未使用过 MSYS 的 git-sh/git-bash 分支,但我知道对于 MinGW.org 的 MSYS,我们总是警告非常强烈地反对 i> 安装到“Program Files”的任何子目录中(或任何其他在其绝对路径名中带有空格的目录)。看,那个空间肯定会转身咬你,最终;我想知道在这种情况下它是否正在这样做?
  • 嘿@Keith,谢谢你的回答!实际上,这些空格是我在此处复制代码时的错误。我的脚本没有那个,所以我编辑了我的原始帖子并删除了那些空格。其次,我尝试在非空格文件夹上重新安装 Git(实际上我确实将它安装在 C:) 上,但不幸的是我仍然遇到同样的错误。 =(
  • @jthill:“拉开.exe”。同意,我们通常不会在 shebang 中指定 .exe,但是对于来自 MinGW.org 的 MSYS,在 32 位 Windows7 上,这两种方式都没有区别——#!/bin/sh#!/bin/sh.exe WJFFM。也许 64 位 Windows 的 git 端口已经破坏了这个?
  • @MarceloPetrucelli,您的登录外壳是否已正确初始化?你是怎么开始的? type sh.exe 的输出是什么?

标签: git mingw git-bash mingw-w64


【解决方案1】:

./script.sh: line 1: #!/bin/sh.exe: 没有那个文件或目录

FWIW 这个错误通常是由被称为 UTF8-BOM 的可憎之物引起的。

字符“零宽度不间断空格”在 UTF16 中用作“字节顺序标记”。一些 Windows 编辑器(记事本 IIRC)也将这个不可见(无用)的字符放在以 UTF8 编码的文件的开头。

如果您有“记事本++”,则编码菜单项允许您在 UTF8 和 UTF8-BOM 之间进行选择,请将文件切换到前者。

【讨论】:

    【解决方案2】:

    您如何尝试运行它?在命令提示符下我需要做的就是将文件拖到 MINGW64 窗口中,这样文件路径和名称就会出现,按回车键,它就会运行。

    但是,如果我在命令行中的文件名前面加上 sh,我会得到“#!/bin/sh.exe: No such file or directory”或您提到的类似内容。

    即:

    $ [文件路径]

    有效。

    $ sh [文件路径]

    没有。

    【讨论】:

      猜你喜欢
      • 2020-10-03
      • 2017-01-05
      • 1970-01-01
      • 2018-04-17
      • 2023-03-14
      • 2018-12-27
      • 1970-01-01
      • 2020-09-06
      • 2021-09-04
      相关资源
      最近更新 更多