node.js - 从脚本安装后,Bash 重新加载以查找可执行文件
问题描述
我正在尝试编写一个小 shell 脚本来安装nvm
,然后安装.nvmrc
文件中指定的节点版本。的安装nvm
似乎成功了,但我无法调用nvm install
,因为$(command -v nvm)
没有输出。同样在终端中,我从nvm
install.sh
脚本中得到消息:
=> 关闭并重新打开终端以开始使用 nvm 或运行以下命令以立即使用它:
#!/bin/bash
if ! [ -x "$(command -v nvm)" ]; then
echo 'Installing Node version manager (http://nvm.sh).' >&2
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
fi
source ~/.bash_profile
source ~/.bashrc
if [ -x "$(command -v nvm)" ]; then
nvm install
exit
fi
exit 1
如何nvm
在 bash 脚本中使用命令?
解决方案
如果您想简单地使用脚本给出的命令修改环境而不重新加载整个配置文件,请使用:
eval "$(curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash | grep -E -v "^.?=>")"
grep
=>
将删除以潜在隐藏字符
开头的评论。eval
将在当前 shell 中执行命令。
然后不要使用-x
,因为command -v nvm
返回 nvm 而不是完整路径。
if [ -n "$(command -v nvm)" ]; then
nvm install
exit $?
fi
并且遵循三元组的建议使用一个bareexit
来保留返回码。
脚本变为:
#!/bin/bash
if ! [ -n "$(command -v nvm)" ]; then
echo 'Installing Node version manager (http://nvm.sh).' >&2
eval "$(curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash | grep -E -v "^.?=>")"
fi
if [ -n "$(command -v nvm)" ]; then
nvm install
exit
fi
exit 1
推荐阅读
- python - 如何将相同的过程应用于熊猫中的多个csv文件并将其保存在另一个目录中?
- java - 是否有模式注册表规范?
- azure-devops - 为什么天蓝色构建管道不为角度构建生成 dist 文件夹
- javascript - 将 JavaScript 导入 React
- python-3.x - 从 Txt 文件 Python 运行 SQL 查询
- qt - 如何使用 TAB 和 SHIFT+TAB 在 macOS 中的自定义 QML 控件上循环 activeFocus?
- django - 如何在将 aws elastic beanstalk 用于 django 应用程序时使用 nginx 设置 gunicorn
- sql-server - 在 SQL Server 中,可以在 case 语句中的“THEN”之后有多个语句吗?
- python - 用于单击按钮的 Webscraping 代码停止工作
- assembly - arm-none-eabi-ld -Ttext=0x20 -o add.elf add.o有什么用