在"vagrant ssh"上自动chdir到vagrant目录

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则不会被读取.

  • 这个答案很有帮助,但我发现在Ubuntu VM的情况下,措辞有些含糊不清.这对我有用:1.`$ vagrant ssh` 2.` $ vi .bash_profile`在你发现自己在ssh之后的目录中 - 如果有疑问首先使用`$ cd〜`3添加到主目录`cd/vagrant`到文件并保存. (2认同)

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目录中。

  • 这是比尝试解析/配置“.bashrc”文件更好的解决方案。 (3认同)
  • 这应该是正确的答案。它对环境中其他进程的侵入性最小,并且专门处理 vagrant ssh 命令。 (3认同)
  • 2020 年以上的最佳答案(2013 年问题被接受时可能不存在)。 (2认同)
  • 我的首选答案,但请注意一个缺点(截至 2.2.14): `vagrant ssh -c <cmd>` 或 `vagrant ssh -- <cmd>` 将*附加*到这些配置的参数而不是替换它们。因此,在主机上,如果没有此配置:`vagrant ssh -c pwd`工作正常,但使用此配置会给出错误:“/bin/bash:无法执行二进制文件” (2认同)

Men*_*heh 6

您需要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。)您只需将新行粘贴在文件底部即可。


gon*_*tra 5

您也可以这样做:

vagrant ssh -c "cd /vagrant && bash"

您可以将其包含在脚本中以启动它(如./vagrant-ssh)。