我正在设置一个vagrant框(VM)来模仿服务器。我们的想法是通过运行一个命令初始化VM,并使用单个bash脚本文件“bootstrap.sh”来自行配置。
我正在尝试在我的VM上运行ember。
所以在脚本文件中,我安装了node,nvm,npm以及所有其他类型的依赖项和东西。仅供参考,这就是文件的样子:
echo "installing node version manager"
curl https://raw.githubusercontent.com/creationix/nvm/v0.24.0/install.sh | bash
source ~/.nvm/nvm.sh
# EMBER CLI & DEPENDENCIES ...
# Install node.js
echo "Installing node.js"
nvm install stable
nvm use stable
# Symlink node to node.js
echo "node symlink"
ln -s /usr/bin/nodejs /usr/bin/node
# Install npm
echo "Installing node package manager"
apt-get install -y npm
# Install Ember CLI
echo "Installing Ember CLI"
npm install -g ember-cli
# Install Bower
echo "Installing bower"
sudo npm install -g bower
# Install watchman from source
apt-get install -y autoconf automake
git clone https://github.com/facebook/watchman.git
cd watchman
./autogen.sh
./configure
make
make install
cd
# Install Phantom.js
echo "Installing Phantom.js"
sudo npm install -g phantomjs
# Do some weird path thing that makes npm find Ember (?)
echo "Creating path for node modules"
export PATH=node_modules/.bin:$PATH
但是当我运行ember s
时,它会说“未找到命令:”。
如果我在VM中重新运行此行:
export PATH=node_modules/.bin:$PATH
然后它有效。
所以似乎export PATH=node_modules/.bin:$PATH
不能从shell脚本文件中运行,但如果从命令行运行它(通过ssh在VM上运行)它会起作用
为什么会发生这种情况?如何从脚本文件中运行此命令,就好像它是从命令行运行一样?
答案 0 :(得分:0)
在PATH
中拥有相对路径名称是没有意义的。只有在node_modules
的父目录中时才会找到任何二进制文件。我不认为再次运行export
会有所不同;你碰巧在正确的目录中。
假设您的主目录中有node_path
,请尝试
export PATH=$HOME/node_modules/.bin:$PATH
牛肉在$HOME/
前面添加node_modules
。