Re: 2Sheridan: ну че, баттл? PS vs Bash...
От: octo47 Россия  
Дата: 02.02.09 00:11
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Предлагаю баттл. Каждый нечетный раунд — мой, каждый четный — твой. "Хозяин" раунда озвучивает задачу, решенную им с помощью одного из сабжевых средств и представляет, собственно — решение. Второй — решает эту же задачу с помощью своего средства. Остальные — оценивают каждое из сообщений (1,2,3). Играем 10 раундов, каждый ведет по 5. По результатам — сложим оценки и определим победителя. Готов?



Ну это скорее всего не сложно , но все же. Просто интересно как это будет выглядить без winrar.exe
и какая инфраструктура потребуется для повторения usecase:
$ make 
$ setup.exe octo47@myserver.ru
Password: *****
$ ssh octo47@myserer.ru
Last login: Mon Jan 26 22:55:20 2009
Have a lot of fun...
(myserver.ru)$


Сей набор (Makefile + scripts/header.sh) — это самораспаковывающийся инсталятор окружения на удаленной машине.
Makefile (хотя можно сделать и шелом, ибо в makefile просто команды шела) создает скрипт setup.sh, который копирует себя
на удаленноу машину и там распакоывается.
ЗЫ: winrar — не часть ps, т.к. не является частью ос)
.
|-- Makefile
|-- archive
|   |-- .profile.common
|   |-- .ssh
|   |   `-- authorized_keys
|   |-- .vim
|   |   `-- colors
|   |       `-- calmar256-dark.vim
|   |-- .vimrc
|   |-- .zshprompt
|   `-- .zshrc
|-- scripts
|   `-- header.sh
`-- setup.sh

scripts/header.sh
#!/bin/sh

usage() {
        echo "My Host Installer v1.0"
        echo "setup.sh install <uname@host>]"
        exit 1
}

extract() {
        SKIP=`awk '/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }' $0`
        tail -n +$SKIP $0 | tar xz
}

case "$1" in
        install) 
        if [ "x$2" = "x" ]; then
            usage
        fi
        NAME=`basename "$0"`
        scp "$0" "$2:~/"
        ssh "$2" chmod +x "$NAME" 
        ssh "$2" ./$NAME _unpack
        ssh "$2" rm -f "$NAME" 
    ;;
        _unpack)
                if [ "x$SSH_CONNECTION" = "x" ]; then
                        echo "Call only in SSH session"
                        usage
                fi

        extract
    ;;
        *) 
        usage
    ;;
esac

exit 0

__ARCHIVE_FOLLOWS__


Makefile
ARCHSRC=$(shell ls -1 archive)
all: setup.sh
buildenv: 
    @if [ ! -d .build ]; then mkdir .build; fi

setup.sh: scripts/header.sh archive.tgz
    @cat scripts/header.sh > setup.sh
    @cat .build/archive.tgz >> setup.sh
    @chmod +x setup.sh

archive.tgz: buildenv $(ARCHSRC)
    @(cd archive && tar -zcf ../.build/archive.tgz .)
    
clean:
    @rm setup.sh
    @rm -rf .build
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.