Как создать оболочку для программы? - PullRequest
0 голосов
/ 27 октября 2019

Я хочу научиться создавать обертку вокруг программы в Linux. Как это сделать? Ссылка учебник веб-страницу / ссылку или пример будет делать. Чтобы пояснить, что я хочу изучить, я объясню на примере.

Я использую vim для редактирования текстовых файлов. И используйте rcs в качестве моей простой системы контроля версий. rcs позволяет регистрировать и оформлять файлы. Я хотел бы создать программу Warpper с именем vir , которая, когда я наберу в командной оболочке как:

$ vir temp.txt

, загрузит файл temp.txt в rcs с помощью ci -u temp.txt и затем позволитмне отредактировать файл с помощью vim.

Когда я выйду и вернусь, сначала нужно будет проверить файл, используя ci -u temp.txt и разрешить мне редактировать файл, как это обычно делается с vim, а затем, когда я сохраняю и выхожу, он должен зарегистрировать файл, используя co -u temp.txt, и как часть этого я должен иметь возможность добавить комментарий управления версиями.

По сути, все, что я хочу сделать в командной строке:

$ vir temp.txt

, как это было бы с vim. И обертка должна позаботиться о контроле версий для меня.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

У меня есть оболочка для улучшения команды ping (с использованием zsh), она может, может быть, поможет вам:

# ping command wrapper - Last Change: out 27 2019 18:47
# source: https://www.cyberciti.biz/tips/unix-linux-bash-shell-script-wrapper-examples.html
ping(){
    # Name: ping() wrapper
    # Arg: (url|domain|ip)
    # Purpose: Send ping request to domain by removing urls, protocol, username:pass using system /usr/bin/ping
    local array=( $@ )          # get all args in an array
    local host=${array[-1]}     # get the last arg
    local args=${array[1,-2]}   # get all args before last arg in $@
    #local _ping="/usr/bin/ping"
    local _ping="/bin/ping"
    local c=$(_getdomainnameonly "$host")
    [ "$host" != "$c" ] && echo "Sending ICMP ECHO_REQUEST to \"$c\"..."
    # pass args and host
    # $_ping $args $c
    # default args for ping
    $_ping -n -c 2 -i 1 -W1 $c
}

_getdomainnameonly(){
    # Name: _getdomainnameonly
    # Arg: Url/domain/ip
    # Returns: Only domain name
    # Purpose: Get domain name and remove protocol part, username:password and other parts from url
    # get url
    local h="$1"
    # upper to lowercase
    local f="${h:l}"
    # remove protocol part of hostname
    f="${f#http://}"
    f="${f#https://}"
    f="${f#ftp://}"
    f="${f#scp://}"
    f="${f#scp://}"
    f="${f#sftp://}"
    # Remove username and/or username:password part of hostname
    f="${f#*:*@}"
    f="${f#*@}"
    # remove all /foo/xyz.html*
    f=${f%%/*}
    # show domain name only
    echo "$f"
}

Что скрывает локальный пинг с помощью функции под названием «ping», так что если ваш скриптимеет приоритет на вашем пути, он сначала найдет функцию ping. Затем внутри скрипта я определяю внутреннюю переменную ping, которая указывает на настоящую команду ping:

 local _ping="/bin/ping"

Вы также можете заметить, что аргументы хранятся в одном массиве.

0 голосов
/ 27 октября 2019

Взгляните на rcsvers.vim, плагин vim для автоматического сохранения версий в RCS;Вы можете изменить это. Есть также другие плагины RCS для vim на vim.org

...