使用export命令从shell脚本文件更改PATH

时间:2015-03-31 14:42:52

标签: bash unix ember.js path vagrant

我正在设置一个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上运行)它会起作用

为什么会发生这种情况?如何从脚本文件中运行此命令,就好像它是从命令行运行一样?

1 个答案:

答案 0 :(得分:0)

PATH中拥有相对路径名称是没有意义的。只有在node_modules的父目录中时才会找到任何二进制文件。我不认为再次运行export会有所不同;你碰巧在正确的目录中。

假设您的主目录中有node_path,请尝试

export PATH=$HOME/node_modules/.bin:$PATH

牛肉在$HOME/前面添加node_modules