我设置了一个 Makefile,如下所示:
NVM := $(shell command -v nvm 2> /dev/null)
setup:
ifndef NVM
@echo "Installing NVM"
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
nvm install node
endif
# do setup here
我的目标是安装 nvm(如果尚未安装)。每次运行make setup
脚本都会进入nvm安装,即使 nvm 已经安装。事实上,如果在新的终端中运行,command -v nvm
我会看到:
非易失性
知道为什么会发生这种情况吗?
答案1
NVMinstall.sh
脚本默认安装到~/.nvm
.它不会安装名为的实际二进制文件或脚本非易失性。相反,非易失性命令是定义的函数,~/.nvm/nvm.sh
其中源自交互式终端配置文件(例如,~/.bashrc
)。测试 NVM 安装的一个简单方法是检查源文件是否存在。
NVM := $(shell test -f "$(HOME)/.nvm/nvm.sh"; echo $$?)
setup:
ifneq ($(NVM),0)
@echo "NVM not installed"
else
@echo "NVM installed"
endif
请注意,我们将退出代码存储在非易失性存储器。0意味着它被发现了。