2013-07-25 45 views
33

所以,我有一羣流浪的虛擬機運行一些Linux的風格(centos,ubuntu,無論)。我想自動確保一個「流浪ssh」也將「cd/vagrant」,以便沒有人必須記得這樣做,只要他們登錄。自動chdir到「流浪ssh」的流浪目錄

我已經想通了(杜!)echo "\n\ncd /vagrant" >> /home/vagrant/.bashrc會做的伎倆。我不知道的是如何確保只有在cd命令不存在的情況下才會發生這種情況。我不是殼牌專家,所以我在這裏完全困惑。 :)

回答

24

cd是內置的Bash shell,只要安裝了shell就應該在那裏。

此外,請注意,~/.bash_profile用於交互式登錄shell,如果在~vagrant/.bashrc中添加cd /vagrant,則可能無效。

因爲像Ubuntu發行版沒有這個文件 - >~/.bash_profile在默認情況下,轉而使用~/.bashrc~/.profile

如果有人創造了在Ubuntu遊民用戶~/.bash_profile~vagrant/.bashrc將不會被讀取。

+0

你在哪裏配置你的流浪配置?我假設不在虛擬機內創建它。 –

+1

這個答案很有幫助,但是我發現這個措辭在Ubuntu VM的情況下有些模棱兩可。這對我有用: 1.'$ vagrant ssh' 2.'$ vi .bash_profile'在ssh之後的目錄中 - 如果有疑問首先使用'$ cd〜'進入主目錄 3.將'cd/vagrant'添加到文件並保存。 – mardlin

4

您可以將cd /vagrant添加到您的.bashrc,它將在您運行ssh時運行該命令。您需要的/bashrc位於/home/vagrant(您登錄的用戶爲vagrant ssh。)您可以將新行粘貼在文件底部。

23

我把

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

在我provision.sh,它就像一個魅力。

+0

好,但如果它已經在那裏呢? – Menasheh

+0

的確,如果有人知道一個只在文件中不存在的情況下才會追加它的班輪,情況會更好。 – httpete

1

可能會有所幫助。編輯Vagrantfilevagrant

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

您需要添加cd /vagrant到.bashrc在VM替換您的用戶名。執行此操作的最佳方法是在您的預配器腳本中。

如果沒有供應方的腳本,使一個加入這一行到您的Vagrantfile end前:

config.vm.provision "shell", path: "scripts/vagrant/provisioner.sh", privileged: false 

路徑是相對於項目的根在Vagrantfile是,和特權取決於你項目以及可能需要獲得特權的預配置腳本中的其他內容。必要時我明確使用priveleged false和sudo。

而在供應方腳本:

if ! grep -q "cd /vagrant" ~/.bashrc ; then 
    echo "cd /vagrant" >> ~/.bashrc 
fi 

這將增加cd /vagrant到.bashrc中,但只有當它不存在的話。如果您重新配置,這非常有用,因爲它可以防止您的.bashrc混亂。

有些答案提到與.bash_profile衝突。如果上述代碼不起作用,您可以嘗試使用與.bash_profile.profile相同的行,而不是.bashrc。但是,我一直在使用Ubuntu的客人流浪。我的基於Ubuntu的Laravel/homestead盒子有.bash_profile.profile,但cd /vagrant.bashrc沒有爲我工作時使用vagrant ssh而不更改或刪除其他文件。