web-dev-qa-db-ja.com

「vagrant ssh」時に自動的にvagrantディレクトリにchdirする

だから、私はLinuxのいくつかのフレーバー(centos、ubuntuなど)を実行する多くのvagrant VMを持っています。 「vagrant ssh」が「cd/vagrant」にもなるように自動的に確保したいので、誰もがログインするたびにそのことを覚えておく必要はありません。

私はそれを理解しました(そうです!)echo "\n\ncd /vagrant" >> /home/vagrant/.bashrcトリックを行います。私が知らないのは、これがcdコマンドがまだない場合にのみ発生するようにする方法です。私はシェルの専門家ではないので、ここでは完全に混乱しています。 :)

41
Rob Kinyon

cdはBashシェルの組み込みであり、シェルがインストールされていれば、そこにあるはずです。

また、~/.bash_profileはインタラクティブログインシェル用であり、cd /vagrant~vagrant/.bashrcを追加した場合、機能しない可能性があることに注意してください。

Ubuntuのようなディストリビューションにはこのファイルがありません-> ~/.bash_profileがデフォルトであり、代わりに~/.bashrc~/.profileを使用します

Ubuntuでvagrantユーザー用に~/.bash_profileを作成した場合、~vagrant/.bashrcは読み取られません。

26
Terry Wang

置いた

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

私のprovision.sh、それは魅力のように動作します。

28
httpete

VMの.bashrcにcd /vagrantを追加する必要があります。これを行う最良の方法は、プロビジョニングスクリプトにあります。

プロビジョニングスクリプトがない場合は、endの前にVagrantfileに次の行を追加して、スクリプトを作成します。

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

パスは、Vagrantfileがあるプロジェクトルートからの相対パスであり、特権は、プロジェクトと、特権を必要とする可能性があるプロビジョニングスクリプト内の他の内容によって異なります。必要に応じて、特権のある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ゲストでvagrantを使用しています。 Ubuntuに基づく私のLaravel/Homesteadボックスには.bash_profile.profileがありますが、cd /vagrant.bashrcがあるdidvagrant ssh他のファイルを変更または削除せずに。

6
Menasheh

config.ssh.extra_args Vagrantfileの設定:

  config.ssh.extra_args = ["-t", "cd /vagrant; bash --login"]

その後、いつでもvagrant sshあなたは/vagrantディレクトリ。

5
q0rban

あなたは付け加えられます cd /vagrantから.bashrcし、sshするとコマンドが実行されます。 /bashrcあなたが欲しい/home/vagrant(あなたがログインしたときのユーザーvagrant ssh。)新しい行をファイルの下部に貼り付けることができます。

4
bfitzpatrick

次のようにすることもできます:

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

そして、それを起動するスクリプトに含めることができます(./vagrant-sshなど)。

3
gonzaloriestra

これが役立つかもしれません。ユーザー名を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
` 
2
captainchhala

理想的には、浮浪者のsshの動作を変更したいだけです。

私の場合、環境内の他のプロセスに影響を及ぼさない何かが欲しかったので、このようなことをvagrantファイルで行うことができます-

    VAGRANT_COMMAND = ARGV[0]
    if VAGRANT_COMMAND == "ssh"
        config.ssh.extra_args = ["-t", "cd /vagrant; bash --login"]
    end
0