我尝试了一点虚拟化,所以我一直在使用vagrant配置centos7 vm,现在我正在使用应用程序进行配置。
我的vagrant配置运行一个bootstrap.sh文件,这是一个bash脚本,我在其中安装zsh,然后我想根据https://github.com/sorin-ionescu/prezto配置它。 第1步是启动zsh然后运行一些命令。
这是我目前的代码。
echo "Installing zsh"
yum install -y zsh
echo "Configure zsh"
# touch /home/vagrant/.zshrc
exec /usr/bin/zsh
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
chsh -s /bin/zsh
我希望这是当我进入虚拟机时的默认shell。它似乎没有工作,流浪者上升步骤没有错误所以我只想知道这是否可能,如果这似乎是正确的?
由于
答案 0 :(得分:4)
name
用zsh替换你的shell - 但是不会以任何方式告诉zsh的实例在执行的同一点获取,或者甚至运行与之前的bash调用相同的脚本执行完毕。
一个简单的解决方法是通过heredoc将剩余的脚本提供给zsh:
exec zsh
答案 1 :(得分:3)
exec /usr/bin/zsh
使用新的 zsh 进程替换正在运行的脚本。之后的一切都没有被执行。
您基本上有两种选择:
将特定于 zsh 的内容放入单独的脚本中并使用/usr/bin/zsh
运行:
流浪:
echo "Installing zsh"
yum install -y zsh
echo "Configure zsh"
# touch /home/vagrant/.zshrc
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
# run external script
/usr/bin/zsh /home/vagrant/install-prezto.zsh
chsh -s /bin/zsh
/home/vagrant/install-prezto.zsh
:
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
修改脚本,以便安装不需要 zsh :
echo "Installing zsh"
yum install -y zsh
echo "Configure zsh"
# touch /home/vagrant/.zshrc
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
# use find instead of *zsh* to link files
find "${ZDOTDIR:-$HOME}/.zprezto/runcoms/" -maxdepth 1 -type f -! -name README.md --exec ln -s {} "${ZDOTDIR:-$HOME}/" +
chsh -s /bin/zsh