首页 注册 登录
V2EX = way to explore V2EX 是一个关于分享和探索的地方
现在注册 已注册用户请 登录
Distributions Ubuntu Fedora CentOS 中文资源站 网易开源镜像站
V2EX Linux

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

K1W1 · 2017 年 10 月 31 日 · 9912 次点击
这是一个创建于 2993 天前的主题,其中的信息可能已经有所发展或是发生改变。
不想手动发服务器也不想用 jenkins,然后发现 gitlab 有一个 git 钩子,然后只需要提供的一个 web 接口来接收事件,然后调用发布的脚本就可以了。但是因为只需要一个接口,不想要 java、python 去实现,请问 shell 可以实现吗?
44 条回复 2022年08月18日 19:10:35 +08:00
araraloren
1
araraloren 2017 年 10 月 31 日 ❤️ 1
nc 可以用来监听某一个端口

nc -l <port>
clino
2
clino 2017 年 10 月 31 日
@araraloren nc 不能处理 web 请求吧,没办法返回 response?
lxf1992521
3
lxf1992521 2017 年 10 月 31 日
`man bash`, 然后搜索`Opening File Descriptors for Reading and Writing`章节,可以实现套接字的读和写。
whorusq
4
whorusq 2017 年 10 月 31 日
从 可控性 和 简单度来说,推荐 Python
htfy96
5
htfy96 2017 年 10 月 31 日
socat,可以 accept 一个请求后直接新起一个进程,把进程的输入输出和 socket 关联起来
rrfeng
6
rrfeng 2017 年 10 月 31 日
当然可以。
aWangami
7
aWangami 2017 年 10 月 31 日
简单的 web 接口,为啥不用 Python/Node 之类的来简化工作呢?
TangMonk
8
TangMonk 2017 年 10 月 31 日
用 golang 编译成一个可执行文件就行了,不用安装环境又简单
K1W1
9
K1W1
OP
2017 年 10 月 31 日
@araraloren #1 我试了的确可以收到请求,但是好像只能通过 ctrl + c 才能中断连接
chinuno
10
chinuno 2017 年 10 月 31 日 via Android
Python 自带简单的 http server。不需要其他依赖单个文件就能实现 get post 的处理了
K1W1
11
K1W1
OP
2017 年 10 月 31 日
@aWangami #7 因为只有一个接口,大才小用了,而且我们服务器没有 python 或 node 环境
jtsai
12
jtsai 2017 年 10 月 31 日 via Android
shell http,写 response 好难,request 就简单了。
whileFalse
13
whileFalse 2017 年 10 月 31 日
@K1W1 #11 golang,极易部署
cnwtex
14
cnwtex 2017 年 10 月 31 日 ❤️ 4
楼上一群智障吧, 人家问 shell 能不能, 推荐一堆 go/python/node
des
15
des 2017 年 10 月 31 日 via Android
@clino nact 可以用 lua
pagxir
16
pagxir 2017 年 10 月 31 日 via Android
楼主听过 cgi 否。直接用 socat 然后按照 cgi 来处理
boboliu
17
boboliu 2017 年 10 月 31 日 via Android
@cnwtex shell 实现要更复杂,推荐楼主选择更为简单易行的方案不是很正常么?
huangzxx
18
huangzxx 2017 年 10 月 31 日
你的需求应该用 gitlab-ci
araraloren
19
araraloren 2017 年 10 月 31 日
@clino 能啊 不简单而已。。

不过不如 python perl ruby 了。。
araraloren
20
araraloren 2017 年 10 月 31 日
@K1W1 有 perl 环境也可以啊,写起来都是简单的飞起
xi2008wang
21
xi2008wang 2017 年 10 月 31 日
google 搜索 shell cgi
ysc3839
22
ysc3839 2017 年 10 月 31 日 via Android
我推荐用 CGI
Chingim
23
Chingim 2017 年 10 月 31 日 via Android
cgi 妥妥的
ryd994
24
ryd994 2017 年 10 月 31 日 via Android
说实话,python+flask,比你折腾 bash 容易多了
10 行以内写出来
kuro1
25
kuro1 2017 年 10 月 31 日
只需要一个接口,python 不是很方便么。。linux 的话
araraloren
26
araraloren 2017 年 10 月 31 日
@ryd994
@kuro1
好好看帖子,没有 python 以及 node 环境
mcfog
27
mcfog 2017 年 10 月 31 日
xjp
28
xjp 2017 年 10 月 31 日 via iPhone
查了一下 github 上有个 bashhttpd 是单文件的 bash 脚本 代码不多 实现了文件列表查看 可以参考一下


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

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

你这个也属于运维范畴的了,go 还是很值得了解的
panzhc
32
panzhc 2017 年 10 月 31 日
HttpLuaModule

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

不知道这样算不算
Lonely
33
Lonely 2017 年 10 月 31 日
@cnwtex 恩,人家都智障,就你聪明
NoAnyLove
34
NoAnyLove 2017 年 11 月 1 日
如果我没记错的话,bash 可以按照文件系统路径来操作 socket,不过能不能写出符合你要求的接口就不知道了
cs8425
35
cs8425 2017 年 11 月 1 日
nc 有个-e 选项
把 tcp 输入输出导到另一只程式的标准输入输出
可以写 shell 脚本自己处理 http header 什么的
还是比较推荐弄个 go/node 之类的比较实际一点
避免 header 没处理好造成各种 exploit
julyclyde
36
julyclyde 2017 年 11 月 1 日
@clino 并不需要返回 response 吧? gitlab 那边只负责通知,似乎并不关系是否成功
clino
37
clino 2017 年 11 月 1 日
@julyclyde 呃,我的意思其实是这个 tcp 连接 nc 因为不返回两边都不会主动断开,会一直保持在那里...估计会等什么 timeout 吧,但是如果 timeout 就算异常了吧
lqzhgood
38
lqzhgood 2017 年 11 月 1 日
搭车问问 js(node) 能不能像 GO 那样,编译 /打包 成 .bat/.exe/.sh 不依赖环境的单可执行文件?
不用实现复杂的东西,就像平时处理下重复劳动力,代替 bat shell 这些~
Github 有个 node to bat 但是弃坑好多年了。。
julyclyde
39
julyclyde 2017 年 11 月 1 日
@clino 就算异常了。不过似乎无所谓
sublimevsatom
40
sublimevsatom 2017 年 11 月 1 日
while ( nc -l 80 < /file.htm > : ) ; do : ; done &
iwtbauh
41
iwtbauh 2017 年 11 月 2 日 via Android
推荐用 cgi 啊,直接让 web 服务器调用 shell 脚本
但你硬要用 shell 来处理 http 的细节也不是不行,例如用 xinetd 超级服务器来弄
mingyun
42
mingyun 2017 年 11 月 6 日
不少人推荐 go,看来学习了
hujingnb
43
hujingnb 2022 年 8 月 18 日
已经有人将工具提供出来了, 可见文章: https://hujingnb.com/archives/729
K1W1
44
K1W1
OP
2022 年 8 月 18 日
@hujingnb #43 5 年了,你知道这 5 年我怎么过的吗 😂
关于 · 帮助文档 · 自助推广系统 · 博客 · API · FAQ · Solana · 2722 人在线 最高记录 6679 · Select Language 创意工作者们的社区 World is powered by solitude VERSION: 3.9.8.5 · 33ms · UTC 12:21 · PVG 20:21 · LAX 04:21 · JFK 07:21
♥ Do have faith in what you're doing.

AltStyle によって変換されたページ (->オリジナル) /