web-dev-qa-db-fra.com

Chdir automatiquement vers le répertoire vagrant sur "vagrant ssh"

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. :)

41
Rob Kinyon

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.

26
Terry Wang

Je mets

echo "cd /vagrant_projects/my-project" >> /home/vagrant/.bashrc

dans mon provision.sh, et ça marche comme un charme.

28
httpete

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 .bashrcdid fonctionnait pour moi lors de l'utilisation de vagrant ssh sans modifier ni supprimer les autres fichiers.

6
Menasheh

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.

5
q0rban

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.

4
bfitzpatrick

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).

3
gonzaloriestra

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
` 
2
captainchhala

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
0
openCivilisation