我想学习在Linux程序周围创建包装器。如何做到这一点?教程参考网页/链接或示例都可以。为了阐明我想学习的内容,我将举例说明。
我使用vim编辑文本文件。并使用rcs作为我的简单修订控制系统。 rcs允许您签入和签出文件。我想创建一个名为vir的warpper程序,当我在shell中键入以下形式时:
$ vir temp.txt
将使用ci -u temp.txt
将文件temp.txt加载到rcs中,然后允许我使用vim编辑该文件。
[当我离开并返回时,它需要首先使用ci -u temp.txt
检出文件,并允许我像通常使用vim一样编辑文件,然后当我保存并退出时,它应该检查-在使用co -u temp.txt
的文件中,作为其一部分,我应该能够添加版本控制注释。
基本上,我只想在命令行上做的是:
$ vir temp.txt
就像vim那样。包装程序应该为我负责版本控制。
[查看rcsvers.vim,这是一个用于在RCS中自动保存版本的vim插件;您可以修改它。在vim.org上还有vim的其他RCS插件]
我有一个包装器来增强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,该变量指出真正的ping命令:
local _ping="/bin/ping"
您还可以注意到,args存储在一个数组中。