请问 shell 可以实现一个简单的 web 接口吗?

2017-10-31 10:46:02 +08:00
 K1W1
不想手动发服务器也不想用 jenkins,然后发现 gitlab 有一个 git 钩子,然后只需要提供的一个 web 接口来接收事件,然后调用发布的脚本就可以了。但是因为只需要一个接口,不想要 java、python 去实现,请问 shell 可以实现吗?
8906 次点击
所在节点    Linux
44 条回复
xi2008wang
2017-10-31 13:01:29 +08:00
google 搜索 shell cgi
ysc3839
2017-10-31 16:08:37 +08:00
我推荐用 CGI
Chingim
2017-10-31 16:31:45 +08:00
cgi 妥妥的
ryd994
2017-10-31 16:38:17 +08:00
说实话,python+flask,比你折腾 bash 容易多了
10 行以内写出来
kuro1
2017-10-31 16:39:53 +08:00
只需要一个接口,python 不是很方便么。。linux 的话
araraloren
2017-10-31 17:03:33 +08:00
@ryd994
@kuro1
好好看帖子,没有 python 以及 node 环境
mcfog
2017-10-31 17:12:55 +08:00
xjp
2017-10-31 17:15:48 +08:00
查了一下 github 上有个 bashhttpd 是单文件的 bash 脚本 代码不多 实现了文件列表查看 可以参考一下


另外好奇为啥服务器没有 python 环境 各个 Linux 不是自带的吗
ri0day
2017-10-31 21:08:31 +08:00
建议看一下 https://github.com/ri0day/wwwoosh
其实就是 nc 监听一个端口然后处理一下,最后按照 http 协议规定输出 status code ,header, body
congeec
2017-10-31 21:37:01 +08:00
楼主你知道最最最最最初的 web server 就是 CGI + Bash 脚本做的么?后来用 CGI + Perl 脚本
whorusq
2017-10-31 22:35:41 +08:00
何必拘泥于 shell,不是应该用最合适的语言干最合适的事情么?

基于你的情况,用 go 是最简单了,几行代码写完,再编译打包成二进制,直接丢到服务器启动服务就跑起来了,也不需要安装什么环境支持

你这个也属于运维范畴的了,go 还是很值得了解的
panzhc
2017-10-31 22:41:44 +08:00
HttpLuaModule

location /my-website {
content_by_lua_block {
os.execute("/bin/myShellScript.sh")
}
}

不知道这样算不算
Lonely
2017-10-31 23:12:45 +08:00
@cnwtex 恩,人家都智障,就你聪明
NoAnyLove
2017-11-01 00:33:19 +08:00
如果我没记错的话,bash 可以按照文件系统路径来操作 socket,不过能不能写出符合你要求的接口就不知道了
cs8425
2017-11-01 00:57:52 +08:00
nc 有个-e 选项
把 tcp 输入输出导到另一只程式的标准输入输出
可以写 shell 脚本自己处理 http header 什么的
还是比较推荐弄个 go/node 之类的比较实际一点
避免 header 没处理好造成各种 exploit
julyclyde
2017-11-01 10:29:21 +08:00
@clino 并不需要返回 response 吧? gitlab 那边只负责通知,似乎并不关系是否成功
clino
2017-11-01 10:42:32 +08:00
@julyclyde 呃,我的意思其实是这个 tcp 连接 nc 因为不返回两边都不会主动断开,会一直保持在那里...估计会等什么 timeout 吧,但是如果 timeout 就算异常了吧
lqzhgood
2017-11-01 10:55:11 +08:00
搭车问问 js(node) 能不能像 GO 那样,编译 /打包 成 .bat/.exe/.sh 不依赖环境的单可执行文件?
不用实现复杂的东西,就像平时处理下重复劳动力,代替 bat shell 这些~
Github 有个 node to bat 但是弃坑好多年了。。
julyclyde
2017-11-01 11:14:07 +08:00
@clino 就算异常了。不过似乎无所谓
sublimevsatom
2017-11-01 15:13:52 +08:00
while ( nc -l 80 < /file.htm > : ) ; do : ; done &

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/402178

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX