我正在编写一系列Ubuntu安装后脚本,以便安装我需要的库和工具,其中一个应该使用前者安装pyenv和最新的python版本,脚本如下:
#!/usr/bin/env bash
# clone the github repo
echo "Installing pyenv..."
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
# update .bashrc
echo '# pyenv settings:' >> ~/.bashrc
echo 'export PYENV_ROOT="~/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'export PATH="~/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
# reload
. ~/.bashrc
# install python and virtualenv
echo "Installing python 3.5.1 + virtualenv..."
pyenv install 3.5.1
pyenv global 3.5.1
pip install --upgrade pip
pip install virtualenv
echo "pyenv has been installed with python 3.5.1 and virtualenv"
问题是重新加载(. ~/.bashrc
)似乎没有按预期工作,因为我得到:
python.sh: pyenv: not found
python.sh: pip: not found
我也试过source ~/.bashrc
和exec $SHELL
,但问题仍然存在。
我该如何解决这个问题?
ps:我用sudo sh python.sh
答案 0 :(得分:1)
如果引用~
,则不会扩展到用户的主目录。请改用它。
echo '# pyenv settings:' >> ~/.bashrc
echo 'export PYENV_ROOT=~/.pyenv' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'export PATH=~/.pyenv/bin:"$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
我也会改写它看起来像这样:
cat <<'EOF' >> ~/.bashrc
# pyenv settings:
export PYENV_ROOT=~/.pyenv
export PATH=$PYENV_ROOT/bin:$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
EOF
但是,您不应该使用用户的.bashrc
文件;你不知道那里还有什么,你不需要执行整个过程,只需要执行其余脚本所需的部分。将. ~/.bashrc
替换为
export PYENV_ROOT=~/.pyenv
export PATH=$PYENV_ROOT/bin:$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
答案 1 :(得分:0)
操纵~/.bashrc
很危险,除非你想要永久性的东西,否则你也不需要。
更改
echo 'export PYENV_ROOT="~/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'export PATH="~/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
到
export PYENV_ROOT="~/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
并且脚本的其余部分将使用修改后的变量,甚至是子壳。
修改强>
要永久性地将其写入~/.pyenvrc
,只需通过附加修改~/.bashrc
source ~/.pyenvrc