Rob*_*yon 38 bash shell vagrant
所以,我有一堆流浪的VM运行一些Linux(centos,ubuntu,无论如何).我想自动确保"vagrant ssh"也会"cd/vagrant",这样每当他们登录时,没有人必须记住这样做.
我已经想通了(呃!)echo "\n\ncd /vagrant" >> /home/vagrant/.bashrc就可以了.我不知道的是如何确保只有cd命令不存在才会发生这种情况.我不是shell专家,所以我在这里完全糊涂了.:)
Ter*_*ang 26
cd 是一个内置的Bash shell,只要安装了一个shell就应该存在.
此外,要知道这~/.bash_profile是交互式登录shell,如果添加cd /vagrant的~vagrant/.bashrc,它可能无法正常工作.
因为像Ubuntu这样的发行版没有这个文件 - > ~/.bash_profile默认情况下使用~/.bashrc和~/.profile
如果有人~/.bash_profile在Ubuntu上创建了一个for vagrant用户,~vagrant/.bashrc则不会被读取.
htt*_*ete 26
我放
echo "cd /vagrant_projects/my-project" >> /home/vagrant/.bashrc
在我的provision.sh,它就像一个魅力.
q0r*_*ban 22
您可以使用config.ssh.extra_argsVagrantfile 中的设置来执行此操作:
config.ssh.extra_args = ["-t", "cd /vagrant; bash --login"]
Run Code Online (Sandbox Code Playgroud)
然后,无论何时运行,vagrant ssh您都会在/vagrant目录中。
您需要cd /vagrant在vm中添加.bashrc.执行此操作的最佳方法是在您的配置程序脚本中.
如果您没有配置脚本,请在end以下情况之前将此行添加到您的Vagrantfile中:
config.vm.provision "shell", path: "scripts/vagrant/provisioner.sh", privileged: false
Run Code Online (Sandbox Code Playgroud)
Path是相对于Vagrantfile所在的项目根,并且特权取决于您的项目以及您的供应者脚本中可能需要特权的其他内容.我在必要时明确使用priveleged false和sudo.
在供应者脚本中:
if ! grep -q "cd /vagrant" ~/.bashrc ; then
echo "cd /vagrant" >> ~/.bashrc
fi
Run Code Online (Sandbox Code Playgroud)
这将添加cd /vagrant到.bashrc,但仅限于它已经存在.如果您重新配置,这将非常有用,因为它会阻止您的.bashrc混乱.
一些答案提到与.bash_profile的冲突.如果上述代码不起作用,您可以尝试使用.bash_profile或.profile代替相同的行.bashrc.但是,我一直在和ubuntu客人一起使用vagrant.基于Ubuntu我Laravel /宅基地箱具有.bash_profile和.profile,但具有cd /vagrant在.bashrc 没有使用时,工作对我来说vagrant ssh没有更改或删除其他文件.
小智 5
您可以添加cd /vagrant到您的.bashrc,当您 ssh 时它将运行该命令。您想要的/bashrc位于/home/vagrant(您登录时登录的用户vagrant ssh。)您只需将新行粘贴在文件底部即可。