ssh: get proper $PATH for exec! [closes GH-426]
This commit is contained in:
parent
cd83a4a28f
commit
6217a91b5c
|
@ -1,6 +1,6 @@
|
||||||
## 0.8.3 (unreleased)
|
## 0.8.3 (unreleased)
|
||||||
|
|
||||||
|
- Fix SSH `exec!` to inherit proper `$PATH`. [GH-426]
|
||||||
|
|
||||||
## 0.8.2 (July 22, 2011)
|
## 0.8.2 (July 22, 2011)
|
||||||
|
|
||||||
|
|
|
@ -12,11 +12,11 @@ module Vagrant
|
||||||
attr_writer :private_key_path
|
attr_writer :private_key_path
|
||||||
attr_accessor :forward_agent
|
attr_accessor :forward_agent
|
||||||
attr_accessor :forward_x11
|
attr_accessor :forward_x11
|
||||||
attr_accessor :sudo_shell
|
attr_accessor :shell
|
||||||
attr_accessor :port
|
attr_accessor :port
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@sudo_shell = "bash"
|
@shell = "bash"
|
||||||
@port = nil
|
@port = nil
|
||||||
@forward_agent = false
|
@forward_agent = false
|
||||||
@forward_x11 = false
|
@forward_x11 = false
|
||||||
|
|
|
@ -34,7 +34,7 @@ module Vagrant
|
||||||
# of `sudo`.
|
# of `sudo`.
|
||||||
def sudo!(commands, options=nil, &block)
|
def sudo!(commands, options=nil, &block)
|
||||||
channel = session.open_channel do |ch|
|
channel = session.open_channel do |ch|
|
||||||
ch.exec("sudo -H #{env.config.ssh.sudo_shell} -l") do |ch2, success|
|
ch.exec("sudo -H #{env.config.ssh.shell} -l") do |ch2, success|
|
||||||
# Set the terminal
|
# Set the terminal
|
||||||
ch2.send_data "export TERM=vt100\n"
|
ch2.send_data "export TERM=vt100\n"
|
||||||
|
|
||||||
|
@ -60,12 +60,23 @@ module Vagrant
|
||||||
# the command completes. This is an almost line for line copy of
|
# the command completes. This is an almost line for line copy of
|
||||||
# the actual `exec!` implementation, except that this
|
# the actual `exec!` implementation, except that this
|
||||||
# implementation also reports `:exit_status` to the block if given.
|
# implementation also reports `:exit_status` to the block if given.
|
||||||
def exec!(command, options=nil, &block)
|
def exec!(commands, options=nil, &block)
|
||||||
retryable(:tries => 5, :on => [IOError, Net::SSH::Disconnect], :sleep => 1.0) do
|
retryable(:tries => 5, :on => [IOError, Net::SSH::Disconnect], :sleep => 1.0) do
|
||||||
metach = session.open_channel do |channel|
|
metach = session.open_channel do |ch|
|
||||||
channel.exec(command) do |ch, success|
|
ch.exec("#{env.config.ssh.shell} -l") do |ch2, success|
|
||||||
raise "could not execute command: #{command.inspect}" unless success
|
# Set the terminal
|
||||||
setup_channel_callbacks(ch, command, options, block)
|
ch2.send_data "export TERM=vt100\n"
|
||||||
|
|
||||||
|
# Output the commands as if they were entered on the command line
|
||||||
|
[commands].flatten.each do |command|
|
||||||
|
ch2.send_data "#{command}\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remember to exit
|
||||||
|
ch2.send_data "exit\n"
|
||||||
|
|
||||||
|
# Setup the callbacks
|
||||||
|
setup_channel_callbacks(ch2, commands, options, block)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue