Donc, j'ai un tas de machines virtuelles vagabondes qui exécutent une certaine saveur de Linux (centos, ubuntu, peu importe). Je voudrais m'assurer automatiquement qu'un "vagrant ssh" sera également "cd/vagrant" afin que personne ne se souvienne de le faire chaque fois qu'il se connecte.
J'ai compris (duh!) Que echo "\n\ncd /vagrant" >> /home/vagrant/.bashrc
fera l'affaire. Ce que je ne sais pas, c'est comment m'assurer que cela ne se produit que si la commande cd n'est pas déjà là. Je ne suis pas un expert Shell, donc je suis complètement confus ici. :)
cd
est un shell Bash intégré, tant qu'un shell est installé, il devrait y être.
Sachez également que ~/.bash_profile
est pour le shell de connexion interactive, si vous ajoutez cd /vagrant
dans ~vagrant/.bashrc
, cela peut ne PAS fonctionner.
Parce que les distributions comme Ubuntu n'ont PAS ce fichier -> ~/.bash_profile
par défaut et utilisez à la place ~/.bashrc
et ~/.profile
Si quelqu'un crée un ~/.bash_profile
pour un utilisateur vagabond sur Ubuntu, ~vagrant/.bashrc
ne sera pas lu.
Je mets
echo "cd /vagrant_projects/my-project" >> /home/vagrant/.bashrc
dans mon provision.sh
, et ça marche comme un charme.
Vous devez ajouter cd /vagrant
à votre .bashrc dans le vm. La meilleure façon de procéder est dans votre script de provisioning.
Si vous n'avez pas de script de provisioning, créez-en un en ajoutant cette ligne à votre Vagrantfile avant end
:
config.vm.provision "Shell", path: "scripts/vagrant/provisioner.sh", privileged: false
Le chemin est relatif à la racine du projet où se trouve le Vagrantfile, et privilégié dépend de votre projet et de ce qu'il y a d'autre dans votre script de provisioning qui pourrait avoir besoin d'être privilégié. J'utilise explicitement faux et Sudo en cas de besoin.
Et dans le script du provisionneur:
if ! grep -q "cd /vagrant" ~/.bashrc ; then
echo "cd /vagrant" >> ~/.bashrc
fi
Cela ajoutera cd /vagrant
à .bashrc, mais uniquement s'il n'y est pas déjà. Ceci est utile si vous réapprovisionnez, car cela empêchera votre .bashrc de s'encombrer.
Certaines réponses mentionnent un conflit avec .bash_profile. Si le code ci-dessus ne fonctionne pas, vous pouvez essayer la même ligne avec .bash_profile
ou .profile
au lieu de .bashrc
. Cependant, j'utilise vagabond avec des invités Ubuntu. Ma boîte Laravel/Homestead basée sur Ubuntu a un .bash_profile
et un .profile
mais ayant cd /vagrant
dans .bashrc
did fonctionnait pour moi lors de l'utilisation de vagrant ssh
sans modifier ni supprimer les autres fichiers.
Vous pouvez le faire en utilisant config.ssh.extra_args
paramètre dans votre Vagrantfile:
config.ssh.extra_args = ["-t", "cd /vagrant; bash --login"]
Ensuite, chaque fois que vous exécutez vagrant ssh
vous serez dans le /vagrant
répertoire.
Vous pouvez ajouter cd /vagrant
à ton .bashrc
et il exécutera la commande lorsque vous ssh. Le /bashrc
vous voulez est dans /home/vagrant
(l'utilisateur auquel vous vous connectez lorsque vous vagrant ssh
.) Vous pouvez simplement coller la nouvelle ligne au bas du fichier.
Vous pouvez également le faire de cette façon:
vagrant ssh -c "cd /vagrant && bash"
Et vous pouvez l'inclure dans un script pour le lancer (comme ./vagrant-ssh
).
Peut-être que cela peut aider. Modifiez le Vagrantfile
en remplaçant votre nom d'utilisateur par vagrant
`
config.vm.provision "Shell" do |s|
s.inline = <<-Shell
# Change directory automatically on ssh login
if ! grep -qF "cd /home/vagrant/ansible" /home/vagrant/.bashrc ;
then echo "cd /home/vagrant/ansible" >> /home/vagrant/.bashrc ; fi
chown vagrant. /home/vagrant/.bashrc
`
Idéalement, nous voulons simplement modifier le comportement ssh vagabond.
Dans mon cas, je voulais quelque chose qui n'affecte aucun autre processus dans l'environnement, donc nous pouvons faire quelque chose comme ça dans le fichier vagabond-
VAGRANT_COMMAND = ARGV[0]
if VAGRANT_COMMAND == "ssh"
config.ssh.extra_args = ["-t", "cd /vagrant; bash --login"]
end