Bash shell脚本:如何退出并重启脚本?

时间:2013-10-27 14:29:40

标签: bash shell ubuntu ubuntu-12.04

我使用shell脚本来配置我的服务器。修改.bashrc文件后,我需要退出然后重新登录以重新启动shell。

su vagrant <<'EOF'
echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc
echo "export PROJECT_HOME=/var/www" >> ~/.bashrc
echo "alias mkvirtualenv='mkvirtualenv --no-site-packages'" >> ~/.bashrc
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc

source ~/.bashrc

// this is where I need help, i need to exit the shell and relogin. then run mkvirutalenv command.
mkvirtualenv test1

EOF

更新

这是将运行的shell脚本文件vagrant。

#!/usr/bin/env bash

if [ -f "/var/vagrant_provision" ]; then
    exit 0
fi

echo "Installing Flask environment and setting it up.."
echo "------------------------------------------------"
apt-get update >/dev/null 2>&1
echo "1. update is done"

#apt-get upgrade -y >/dev/null 2>&1
echo "2. upgrade is done -- skipped for dev"

rm -rf /var/www
ln -fs /vagrant /var/www
echo "3. Symbolic link is created"

apt-get install -y build-essential python-dev >/dev/null 2>&1
apt-get install -y curl >/dev/null 2>&1
echo "4. curl is installed"

apt-get install -y python-pip >/dev/null 2>&1
echo "5. pip is installed"

pip install virtualenv virtualenvwrapper >/dev/null 2>&1
echo "6. virtualenv and virtualenvwrapper are installed"

su vagrant <<'EOF'
echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc
echo "export PROJECT_HOME=/var/www" >> ~/.bashrc
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
echo "alias mkv='mkvirtualenv --no-site-packages'" >> ~/.bashrc
echo "alias mycmd='ls'" >> ~/.bashrc
source ~/.bashrc

mycmd
mkv test1
EOF

echo "7. add environment variables to .bashrc"
echo "8. source .bashrc"
echo "9. test1 environment is created"

touch /var/vagrant_provision
echo "------------------------------------------------"
echo "Installation is done"

这是我得到的输出。仍然没有找到命令。

Installing Flask environment and setting it up..
------------------------------------------------
1. update is done
2. upgrade is done -- skipped for dev
3. Symbolic link is created
4. curl is installed
5. pip is installed
6. virtualenv and virtualenvwrapper are installed
bash: line 8: mycmd: command not found
bash: line 9: mkv: command not found
7. add environment variables to .bashrc
8. source .bashrc
9. test1 environment is created
------------------------------------------------
Installation is done

1 个答案:

答案 0 :(得分:3)

==&GT;修改.bashrc文件后,我需要退出然后重新登录以重新启动shell。

无需重启shell。如果您希望立即反映当前会话中的更改,则可以使用以下命令执行此操作。

source ~/.bashrc

. ~/.bashrc

通过执行此操作,您将当前的新设置加载到会话中。所以你不需要重新登录。

请找到一个正常运行的示例代码。

#!/usr/bin/sh
echo "alias mycmd='ls'" >> ~/.bashrc
source ~/.bashrc
mycmd

解决您的问题 - &gt;

请为用户'vagrant'创建无密码ssh。请检查文档以创建无密码ssh here

然后输入您的运行文档命令​​,如下所示。

ssh vagrant@localhost "alias mycmd='echo $HOME';/mycmd"

此处在mycmd之前使用'/'是强制性的,否则'mycmd'将仅由当前shell执行,您将收到command not found错误。