请教大家一个关于命令的执行结果在 fish 和 bash 有差异的问题

2022-11-16 19:49:03 +08:00
 zhoudaiyu

如图所示,在 fish 下 ls 一个不存在的文件,并打印一个字符串,再接一个&想把命令挂在后台运行 [为了简化问题,因此变成了打印一个字符串,实际上是想后台启动一个 web 服务] ,因为文件不存在,所以直接退出了;但一样的命令换在 bash 执行,敲完了命令按回车后,就夯住了,直到再按一个回车才退出。想不通这是为啥呢?请 shell 大佬解答一下!谢谢!
912 次点击
所在节点    问与答
7 条回复
leonshaw
2022-11-16 19:58:47 +08:00
并没有 hang 住,只是输出打到了同一行
zhoudaiyu
2022-11-16 20:00:14 +08:00
@leonshaw #1 我在两台服务器上试了,bash 都会 hang 住啊,必须按一下回车才能返回可以输入命令的状态
BrettD
2022-11-16 20:01:53 +08:00
bash 没有卡住,你可以直接输入命令然后按回车,会正常运行你的命令
leonshaw
2022-11-16 20:06:22 +08:00
@zhoudaiyu 前面提示符已经出来了,你可以直接输入命令。另外 bash 的效果相当于
(ls DOSENOTEXIST && echo NO) &
fish 的效果相当于
(ls DOSENOTEXIST) && (echo NO &)
zhoudaiyu
2022-11-16 20:08:52 +08:00
@leonshaw #4 哦哦,明白了,确实可以,但是(ls DOSENOTEXIST && echo NO) & 和 (ls DOSENOTEXIST) && (echo NO &) 我感觉 bash 和 fish 差的还挺多的
mcfog
2022-11-16 21:18:52 +08:00
fish 之前甚至没有怎么考虑过 bash 兼容 && 2>&1 这些东西的支持都还是后加的
nightwitch
2022-11-16 21:27:42 +08:00
fish 主动不兼容 bash 是他的主打卖点之一

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

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

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

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

© 2021 V2EX