我的shell脚本名为mongoLogin.sh如下:
#!/bin/sh
mongo
use demo
show tables
以上功能是登录mongo并显示名为demo的数据库表。
如果我直接通过以下方式执行它:
sh mongoLogin.sh
有效。但是,如果我按以下方式执行它:
cat mongoLogin.sh | sh
与直接执行相比,它会自动退出,直接执行后我也会ctrl+c
退出。管道之后的sh
命令似乎将创建一个新的子流程,并且该子流程由于某种原因而完成。
是否存在通过管道执行脚本可以达到相同结果的方法?
更新: 直接执行时,似乎只有第一个命令才会生效,因为后面的命令是mongo操作,而不是shell命令。当我通过管道执行它时,所有命令都会生效,但是会自动退出。
通过管道执行它的输出,如下所示:
xxx@xxxMacBook-Pro:~/Downloads$cat mongoLogin.sh | sh
MongoDB shell version v4.0.3
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("43c55950-f9e2-49ca-a458-
611f8c71eae4") }
MongoDB server version: 4.0.3
switched to db demo
test
bye
答案 0 :(得分:0)
两个变体都不起作用,因为use demo
不是有效的Shell命令。
我还没有使用mongo,但是如果命令接受来自标准输入,则可以尝试
mongo <<OGNOM
use demo
show tables
OGNOM
确保最终的OGNOM从您的行的第一列开始!