diff --git a/,env b/,env new file mode 100755 index 0000000..235dff9 --- /dev/null +++ b/,env @@ -0,0 +1,68 @@ +#!/usr/bin/env ruby + +help = %[ +,env [OPTIONS] [file] + +Show all environment variables in .env file. Not touching shell. + +Please execute "eval $(,env)" if you what export to shell. + +OPTIONS + +-h --help + print help info + +--unset + unset all environments in target file + +file + default is .env +] + +file = ".env" +is_unset = false + +for arg in ARGV + case arg + when "-h", "--help" + puts help + exit + when "--unset" + is_unset = true + else + file = arg + end +end + +unless File.exist? file + puts "#{file} not exists" + exit 1 +end + +def simple_parse_env(line) + line = line.strip + return [nil, nil] if line.empty? || line.start_with?('#') + + key, value = line.split('=', 2) + return [nil, nil] unless value # 如果没有等号则忽略 + + value = value.split('#', 2).first.strip + + value = value.gsub(/\A['"]|['"]\z/, '') + + [key.strip, value] +end + +File.foreach(file) do |line| + unless line.start_with? "#" + key, value = simple_parse_env(line) + if key and value + if is_unset + puts "export #{key}=" + else + puts "export #{key}=#{value}" + end + end + end +end +