Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Это послужило основанием для создания библиотеки
ShellShell14.3.1. Использование библиотеки Shell для перенаправления ввода/вывода
В классе
Shellnewcdrequire "shell"sh1 = Shell.new # Работать в текущем каталоге.sh2 = Shell.cd("/tmp/hal") # Работать в каталоге /tmp/hal.Библиотека
ShellechocatteeFilterКласс
Filter<>|Если методу перенаправления передать в качестве параметра строку, то она будет считаться именем файла. Если же параметром является объект
IOsh = Shell.new# Вывести файл motd на stdout.sh.cat("/etc/motd") > STDOUT# Напечатать его еще раз.(sh.cat < "/etc/motd") > STDOUT(sh.echo "Это тест") > "myfile.txt"# Добавить строку в конец файла /etc/motd.sh.echo("Hello, world!") >> "/etc/motd"# Вывести два файла на stdout и продублировать (tee) вывод в третий файл.(sh.cat "file1" "file2") | (tee "file3") > STDOUTОтметим, что у оператора
># Интерпретатор Ruby понимает такую конструкцию...sh.cat("myfile.txt") > STDOUT# ...и такую тоже.(sh.cat "myfile.txt") > STDOUT# TypeError! (ошибка связана с приоритетами).sh.cat "myfile.txt" > STDOUTОтметим еще, что можно «инсталлировать» системные команды по своему выбору. Для этого служит метод
def_system_commandlsll# Имя метода совпадает с именем команды...# Необходим только один параметр:Shell.def_system_command "ls"# А здесь должно быть два параметра:Shell.def_system_command "ll", "ls -l"sh = Shell.newsh.ls > STDOUT # Короткий формат.sh.ll > STDOUT # Длинный формат.Вы, наверное, обратили внимание на то, что в большинстве случаев мы явно отправляем вывод объекту
STDOUTShellFilterIO14.3.2. Дополнительные замечания по поводу библиотеки shell.rb
Метод
transactsh = Shell.newsh.transact do echo("Строка данных") > "somefile.txt" cat("somefile.txt","otherfile.txt") > "thirdfile" cat("thirdfile") | tee("file4") > STDOUTendИтератор
foreachsh = Shell.new# Напечатать все строки файла /tmp/foo.sh.foreach("/tmp/foo") {|l| puts l }# Вывести список файлов в каталоге /tmp.sh.foreach("/tmp") {|f| puts f }Метод
pushdirpopdirpushdpopdpwdgetwdcwddir
