shell脚本对编码和行尾是否敏感?

shell脚本对编码和行尾是否敏感?

我正在Mac上制作一个NW.js应用程序,并希望通过双击图标在开发模式下运行该应用程序。第一步,我正在努力使我的shell脚本工作。

在Windows上使用VSCode(我希望获得时间),我创建了一个run-nw文件位于我的项目的根目录下,包含以下内容:

#!/bin/bashcd "src"npm install

cd .../tools/nwjs-sdk-v0.17.3-osx-x64/nwjs.app/Contents/MacOS/nwjs "src" &

但是我得到了这个输出:

$ sh ./run-nw: command not found  
: No such file or directory  
: command not found  
: No such file or directory  

Usage: npm <command>where <command> is one of:  (snip commands list)(snip npm help)npm@3.10.3 /usr/local/lib/node_modules/npm  
: command not found  
: No such file or directory  
: command not found

我真的不明白:

  • 它似乎以空行作为命令。在我的编辑器(VSCode)中,我试图替换

    \r\n

    带着

    \n

    (以防

    \r

    (制造问题)但没有改变什么。
  • 它似乎找不到文件夹(不管有没有

    dirname

    ),或者它可能不知道

    cd

    指挥部?
  • 似乎它不明白

    install

    争论

    npm

  • 真正让我感到奇怪的是,它仍然运行着这个应用程序(如果我做了一个

    npm install

    手动).。

由于无法使它正常工作,并且怀疑文件本身有一些奇怪的地方,所以我这次使用VIM在Mac上直接创建了一个新的文件。我输入了完全相同的指令然后.。现在它的工作没有任何问题。
这两个文件的差异显示了完全零的差别。

有什么不同吗?什么能使第一个脚本不工作?我怎么知道呢?

更新

在接受了答案的命令之后,在错误的行结尾返回后,我检查了多个内容。因为我复制了我的~/.gitconfig在我的Windows机器上autocrlf=true,所以每次在Windows下修改bash文件时,它都会将行尾重新设置为\r\n.
因此,除了运行dos2unix(您必须在Mac上使用HOMEBREW安装它)之外,如果您正在使用Git,请检查您的配置。


慕码人8056858
浏览 583回答 3
3回答

海绵宝宝撒

在MAC/Linux上最简单的方法-使用“触摸”命令创建一个文件,用VI或VIM编辑器打开这个文件,粘贴您的代码并保存。这将自动删除窗口字符。
打开App,查看更多内容
随时随地看视频慕课网APP