Shell脚本源:找不到

Val*_*Val 4 bash shell

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

#!/bin/bash                                                                                                                         

# Load nvm and install latest production node                                                                                       
source $HOME/.nvm/nvm.sh
nvm install v0.10.12
nvm use v0.10.12
Run Code Online (Sandbox Code Playgroud)

如果文件名称为带有以上代码的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
Run Code Online (Sandbox Code Playgroud)

根据我在SO中的评论,脚本的错误似乎源自==> source:未找到。当我自己在CLI上键入此代码时,代码可以正常工作。由于某种原因,我无法通过外壳程序脚本执行此代码。

任何意见,将不胜感激。

tri*_*eee 5

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

#!/bin/sh                                      
# Load nvm and install latest production node
. $HOME/.nvm/nvm.sh
nvm install v0.10.12
nvm use v0.10.12
Run Code Online (Sandbox Code Playgroud)

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

所以代替

sh script
Run Code Online (Sandbox Code Playgroud)

你会做

chmod +x ./script # the first time
./script
Run Code Online (Sandbox Code Playgroud)

权限正确后,仅需要第二行。还有一些小的附加警告,这就是为什么一些忙碌的开发人员有时会针对当前问题给出最简单的说明的原因。