LINUX.ORG.RU
ФорумTalks

RakuToolz — скрипт для ленивых программистов Rakudo от ленивого программиста

 , , ,


0

1

Здравствуйте. Решил вынести за пределы локалхоста сие поделие. Как доучу Rakudo, перепишу на Rakudo.

Есть возможность создавать правильные документы с хешбангом и шарить их (подробнее можно увидеть в коде). Программа на англ. языке.

Зависит от: rakudo, perl6, bash, GNU coreutils.

#!/usr/bin/env bash
#
#
# ____  by   _  Lev    _____  Zagatov  _     
#|  _ \ __ _| | ___   |_   _|__   ___ | |____
#| |_) / _` | |/ / | | || |/ _ \ / _ \| |_  /
#|  _ < (_| |   <| |_| || | (_) | (_) | |/ / 
#|_| \_\__,_|_|\_\\__,_||_|\___/ \___/|_/___|
# RakuToolz v0.1 -- tools for lazy Rakudo programmers
#

EDITOR='emacs -nw'
tmp=`mktemp`
VERSION='0.1'
args="${@:2}"
# environment variables are created

make(){
    /usr/bin/echo '#!/usr/bin/env rakudo' > $tmp # making hashbang
    /usr/bin/echo -e "use v6\n" >> $tmp # making hashbang
    /usr/bin/env bash -c "cat $args >> $tmp" 2> /dev/null # copying text
    cat $tmp > $args # copying text to main file
}
execute(){
    echo -n "Do you want to execute program? [Y/n] "; read -n 1 -s result; read -n 10000 -t 0.1 # asking to execute program
    case $result in
	'N'|'n') /usr/bin/echo '';; # if no -- quit
	*) /usr/bin/echo ''; /usr/bin/env rakudo $args;; # else -- execute
    esac
}
check(){
    if [[ `cat $args | grep '#!/usr/bin' | grep -E 'perl6$|raku$|rakudo$'` = '' ]]; then # if no correct hashbang
	echo "It does not look like $args is correct Rakudo source code file. Continue? [Y/n] "; read -n 1 -s result; read -n 10000 -t 0.1 # continue?
	case $result in
	    'N'|'n') /usr/bin/echo -n ''; exit 1;; # if no --exiting
        esac
    fi
}

help(){ # printing help!
    	echo "Help for RakuToolz v$VERSION"
	echo "======================================="
	echo "Keys      | Description"
	echo "make m    | Makes correct Rakudo file"
	echo "edit e    | Makes file and opens editor"
	echo "open o    | Opens editor"
	echo "share s   | Uploads file to 0x0.st"
	echo "help h    | Shows this help"
	echo "version v | Shows version of RakuToolz"
}
    

case $1 in
    'make'|'m')
        make; execute;;
    'new'|'n')
	make; $EDITOR $args; execute;;
    'edit'|'e')
	check; $EDITOR $args; execute;;
    'share'|'s')
	check; link=`curl -F"file=@$args" http://0x0.st || echo error` # uploading files to 0x0
	case $link in
	    'error') echo 'Error while uploading, sorry.';; # if error -- say about error
	    *) echo "Your $args file was succesfully uploaded to 0x0.st! Link: < $link >";; # else -- give link
	esac;;
    'help'|'h')
        help;; # help
    'version'|'v')
	echo "RakuToolz v$VERSION";; # version
    '')
	echo 'Error: no keys given'; help;; # say about error and show help
    *)
	echo "Error: no key $1 found"; help;; # say about error and show help
esac

Написано на коленке. Возможно, и вам пригодится.

Что можно добавить, что лучше разъяснить? Нужно ли это вообще?



Последнее исправление: zagatov_lev (всего исправлений: 2)
Ответ на: комментарий от Artamudo

Ну смотрите, Perl/Rakudo – это язык, более мощный, чем sh и похожий синтаксисом на sh. То, что мне надо.

Правда, единственное, что мне нужно для порта на Rakudo – это знание функций и записи в файл. Команды sh запускаются через system, и единственная такая команда – это, как мне кажется, mktemp.

zagatov_lev
() автор топика
Последнее исправление: zagatov_lev (всего исправлений: 1)
Ответ на: комментарий от zagatov_lev

Мощнее – это да. Но нынешняя хипстота скорее на питон перепрыгнет, чем на Rakudo. Не скрою что у меня тоже было желание с ним ознакомится, без знания перла вообще.

Artamudo ★★★★
()
Последнее исправление: Artamudo (всего исправлений: 1)
Ответ на: комментарий от Artamudo

Объяснение (WARNING: polotno)

EDITOR='emacs -nw'
tmp=`mktemp`
VERSION='0.1'
args="${@:2}"

EDITOR – это редактор, в моем случае емакс в консольном режиме.
tmp – путь к временному файлу
VERSION – версия
args – аргументы, начиная со второго.

make(){
    /usr/bin/echo '#!/usr/bin/env rakudo' > $tmp
    /usr/bin/echo -e "use v6\n" >> $tmp
    /usr/bin/env bash -c "cat $args >> $tmp" 2> /dev/null
    cat $tmp > $args
}

Создается функция make. Выполняется гнутый оригнальный echo, который записывает хешбанг во временный файл и оттуда в нужный файл.

execute(){
    echo -n "Do you want to execute program? [Y/n] "; read -n 1 -s result; read -n 10000 -t 0.1
    case $result in
	'N'|'n') /usr/bin/echo '';;
	*) /usr/bin/echo ''; /usr/bin/env rakudo $args;;
    esac
}

Создается функция execute, которая спрашивает, хочу ли я запустить прогу. Если нет, то функция тупо заканчивается, а если нет, то запускается прога.

check(){
    if [[ `cat $args | grep '#!/usr/bin' | grep -E 'perl6|raku'` = '' ]]; then
	echo "It does not look like $args is correct Rakudo source code file. Continue? [Y/n] "; read -n 1 -s result; read -n 10000 -t 0.1
	case $result in
	    'N'|'n') /usr/bin/echo -n ''; exit 1;;
        esac
    fi
}

И создается функция check, которая проверяет программу на хешбанг.

Дальше создается функция help.

case $1 in
    'make'|'m')
        make; execute;;
    'edit'|'e')
	make; $EDITOR $args; execute;;
    'open'|'o')
	check; $EDITOR $args; execute;;
    'share'|'s')
	check; link=`curl -F"file=@$args" http://0x0.st || echo error`
	case $link in
	    'error') echo 'Error while uploading, sorry.';;
	    *) echo "Your $args file was succesfully uploaded to 0x0.st! Link: < $link >";;
	esac;;
    'help'|'h')
        help;;
    'version'|'v')
	echo "RakuToolz v$VERSION";;
    '')
	echo 'Error: no keys given'; help;;
    *)
	echo "Error: no key $1 found"; help;;
esac

Ну тут все состоит из вышеописанных функций.

Help for RakuToolz v0.1
=======================================
Ключи     | Описание
make m    | Создает файл с хешбангом и, если в файле что-то есть, записывает после хешбанга код
edit e    | Создает файл и открывает редактор
open o    | Открывает редактор
share s   | Загружает файл на 0x0.st
help h    | Показывает справку
version v | Показывает версию
zagatov_lev
() автор топика
Последнее исправление: zagatov_lev (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.