如何将Docker命令封装为可传参执行的Bash单命令脚本?
容器化nmap包装脚本修改方案
核心修改逻辑
你现有脚本存在两个问题:
- 命令前加了
echo关键字,只会打印命令字符串不会实际执行 - 写死
$1 $2 $3 $4 $5的传参方式最多支持5个参数,参数过多会丢失,也无法正确处理带空格的参数
直接把脚本替换为以下内容即可:
#!/bin/bash docker run --rm -it instrumentisto/nmap "$@"
关键说明
- 去掉
echo后,脚本会直接执行后续的docker命令,不再仅打印内容 - 特殊变量
"$@"是Bash内置的位置参数透传写法,会把调用脚本时传入的所有参数原封不动传递给容器内的nmap程序,不受参数数量限制,也能自动兼容带空格、特殊字符的参数,不会出现参数拆分错误的问题
使用方法
- 保存修改后的脚本,为脚本添加可执行权限:
chmod +x nmap.sh - 之后即可按预期方式调用,示例:
./nmap.sh -A -T4 -Pn 192.168.3.1
执行效果和手动输入完整docker命令完全一致。
可选优化
如果想全局使用这个容器版nmap,可以把脚本重命名为nmap,移动到/usr/local/bin目录下,之后在任意路径直接敲nmap [参数]即可调用,和原生安装的nmap使用体验完全一致,无需输入长docker命令或携带脚本后缀。
内容的提问来源于stack exchange,提问作者Simm Simmons
相关产品推荐
相关产品推荐

