所以,我有一羣流浪的虛擬機運行一些Linux的風格(centos,ubuntu,無論)。我想自動確保一個「流浪ssh」也將「cd/vagrant」,以便沒有人必須記得這樣做,只要他們登錄。自動chdir到「流浪ssh」的流浪目錄
我已經想通了(杜!)echo "\n\ncd /vagrant" >> /home/vagrant/.bashrc
會做的伎倆。我不知道的是如何確保只有在cd命令不存在的情況下才會發生這種情況。我不是殼牌專家,所以我在這裏完全困惑。 :)
所以,我有一羣流浪的虛擬機運行一些Linux的風格(centos,ubuntu,無論)。我想自動確保一個「流浪ssh」也將「cd/vagrant」,以便沒有人必須記得這樣做,只要他們登錄。自動chdir到「流浪ssh」的流浪目錄
我已經想通了(杜!)echo "\n\ncd /vagrant" >> /home/vagrant/.bashrc
會做的伎倆。我不知道的是如何確保只有在cd命令不存在的情況下才會發生這種情況。我不是殼牌專家,所以我在這裏完全困惑。 :)
cd
是內置的Bash shell,只要安裝了shell就應該在那裏。
此外,請注意,~/.bash_profile
用於交互式登錄shell,如果在~vagrant/.bashrc
中添加cd /vagrant
,則可能無效。
因爲像Ubuntu發行版沒有這個文件 - >~/.bash_profile
在默認情況下,轉而使用~/.bashrc
和~/.profile
如果有人創造了在Ubuntu遊民用戶~/.bash_profile
,~vagrant/.bashrc
將不會被讀取。
您可以將cd /vagrant
添加到您的.bashrc
,它將在您運行ssh時運行該命令。您需要的/bashrc
位於/home/vagrant
(您登錄的用戶爲vagrant ssh
。)您可以將新行粘貼在文件底部。
可能會有所幫助。編輯Vagrantfile
與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
`
您需要添加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
而不更改或刪除其他文件。
你在哪裏配置你的流浪配置?我假設不在虛擬機內創建它。 –
這個答案很有幫助,但是我發現這個措辭在Ubuntu VM的情況下有些模棱兩可。這對我有用: 1.'$ vagrant ssh' 2.'$ vi .bash_profile'在ssh之後的目錄中 - 如果有疑問首先使用'$ cd〜'進入主目錄 3.將'cd/vagrant'添加到文件並保存。 – mardlin