/ / Ako posúdiť shell skript na Ruby hash? - rubín

Ako posúdiť shellový skript na Rubyho hash? - rubín

Mám tento shell skript v súbore s názvom a.sh:

export A="a"
export B=b
export C=1
export D=$USER  # say $USER is root

Existujú aj iné podobné súbory b.sh, c.sh, atď.

Potrebujem prečítať súbor shell, povedzme a.sh, z rubínového skriptu a premeniť ho na Ruby hash:

{ "A" => "a", "B" => "b", "C" => 1, "D" => "root" }

Ako to dosiahnuť?

odpovede:

3 pre odpoveď č. 1

Ak máte spustený bash skript pred rubínovým, môžete urobiť niečo takéto:

Hash[([ "A", "B", "C", "D" ] & ENV.keys).map {|x| [x, ENV[x]] }]

kde pole [ "A", "B", "C", "D" ] obsahuje platné názvy premenných na vytvorenie Hash.

Ak potrebujete analyzovať skript bash v rubíne, postupujte takto:

vars = {}
IO.read("shell.sh").each do| line |
if line =~ /^exports([A-Za-z_][A-Za-z_0-9]*)=s*(?:[""]([^""]*)[""]|(.*))s*$/
(name, value) = [ $1, $2 || $3 ]
value.gsub!( /$(?:([A-Za-z_][A-Za-z_0-9]*)|{([^{}]+)})/ ) do| match |
ENV[ match[1..-1] ]
end
vars[ name ] = value.gsub(/#.*/, "").strip
end
end
vars
# => {"A"=>"a", "B"=>"b", "C"=>"1", "D"=>"malo"}