Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
sh = Shell.cd "/home"puts sh.pwd # /homesh.pushd "/tmp"puts sh.pwd # /tmpsh.popdputs sh.pwd # /homeДля удобства в класс
ShellFileFileTestftools.rbrequireincludesh = Shell.newflag1 = sh.exist? "myfile" # Проверить существование файла.sh.delete "somefile" # Удалить файл.sh.move "/tmp/foo", "/tmp/bar" # Переместить файл.У библиотеки
Shell14.4. Переменные окружения
Иногда необходимо обращаться к переменным окружения, которые являются связующим звеном между программой и внешним миром. Переменные окружения — это просто метки, связанные с некоторым текстом (обычно небольшим); в них хранятся, например, пути к файлам, имена пользователей и т.п.
Переменные окружения широко применяются в ОС UNIX. Система Windows (а еще раньше MS-DOS) позаимствовала эту идею у UNIX, поэтому приведенные ниже коды будут работать на обеих платформах.
14.4.1. Чтение и установка переменных окружения
Глобальная константа
ENVPATHbypath = ENV["PATH"]# А теперь получим массив...dirs = mypath.split(":")А вот пример установки переменной. Новый процесс мы создали, чтобы проиллюстрировать две вещи. Во-первых, дочерний процесс наследует переменные окружения от своего родителя. Во-вторых, значение переменной окружения, установленное в дочернем процессе, родителю не видно.
ENV["alpha"] = "123"ENV["beta"] = "456"puts "Родитель: alpha = #{env['alpha']}"puts "Родитель: beta = #(env['beta']}"fork do # Код потомка... x = ENV["alpha"] ENV["beta"] = "789" y = ENV["beta"] puts " Потомок: alpha = #{x}" puts " Потомок: beta = #{y}"endProcess.waita = ENV["alpha"]b = ENV["beta"]puts "Родитель: alpha = #{a}"puts "Родитель: beta = #{b}"Программа выводит следующие строки:
Родитель: alpha = 123Родитель: beta = 456 Потомок: alpha = 123 Потомок: beta = 789Родитель: alpha = 123Родитель: beta = 456Это следствие того факта, что родитель ничего не знает о переменных окружения своих потомков. Поскольку программа на Ruby обычно исполняется в подоболочке, то после ее завершения все сделанные изменения переменных окружения не будут видны в текущей оболочке.
14.4.2. Хранение переменных окружения в виде массива или хэша
Важно понимать, что объект
ENVinvertNameErrorENVОднако имеется метод
to_hashenvhash = ENV.to_hashval2var = envhash.invertПолучив такой хэш, мы можем преобразовать его к любому другому виду (например, в массив):
envarr = ENV.to_hash.to_aОбратное присваивание объекту
ENVenvhash = env.to_hash# Выполняем произвольные операции... и записываем обратно в ENV.envhash.each {|k,v| ENV[k] = v }14.4.3. Импорт переменных окружения как глобальных переменных
Существует библиотечка
importenv.rbrequire "importenv"# Теперь переменные окружения стали глобальными переменными...# Например, $PWD и $LOGNAMEwhere = $PWDwho = $LOGNAMEputs "В каталоге #{where}, вошел как #{who}"Поскольку библиотека
importenvtrace_varrequire "importenv"
