Bash Shell脚本源:未找到

Bash Shell脚本源:未找到,bash,shell,Bash,Shell,我正在运行以下简单脚本来测试代码块: #!/bin/bash # Load nvm and install latest production node

我正在运行以下简单脚本来测试代码块:

#!/bin/bash                                                                                                                         

# Load nvm and install latest production node                                                                                       
source $HOME/.nvm/nvm.sh
nvm install v0.10.12
nvm use v0.10.12
如果文件名为test.sh且包含上述代码,则会出现以下错误:

test.sh: 5: test.sh: source: not found
test.sh: 6: test.sh: nvm: not found
test.sh: 7: test.sh: nvm: not found
根据我在SO中的回顾,脚本的错误似乎起源于==>source:notfound。当我自己在CLI中键入此代码时,代码工作正常。由于某些原因,我无法通过shell脚本执行此代码

如有任何建议,将不胜感激

你说的是Bash,但症状表明你正在使用
sh
运行它,它没有
source
命令。从表面上看,将
source
更改为一个点可以解决这一问题,但当然,如果源文件包含任何bashism,它将在这些bashism上失败(可能更微妙,结果不正确,但没有错误消息)

通常,最好将脚本标记为可执行脚本,并让操作系统通过shebang机制选择正确的解释器;然后,您不必记住脚本文件是否包含Bash命令或
sh
命令或Python代码或编译后的代码或其他内容,也不必注意这是否从一个版本更改为另一个版本

所以不是

sh script
你会的

chmod +x ./script # the first time
./script
权限正确后,只需要第二行。还有一些小的附加警告,这就是为什么一些忙碌的开发人员有时会针对眼前的问题给出最简单的说明

chmod+x$HOME/.nvm/nvm.sh

然后

sh$HOME/.nvm/nvm.sh或$HOME/.nvm/nvm.sh


您是如何执行脚本的?错误消息中的行号似乎都是1。您的文件是否有DOS行结尾?我正在Amazon Web Service Ubuntu实例上执行该脚本。因为我删除了printf语句,行号被删除了。谢谢你的回答。您关于使脚本可执行的附加注释帮助我解决了将该脚本重新集成到主代码中的接下来几个问题。让操作系统通过shebang语句选择正确的解释器,就完成了。答案很好,简单解释!这将不会生成脚本,因此
nvm
命令将无法访问由
nvm.sh
定义的变量(或者可能根本不会定义)。
chmod +x ./script # the first time
./script