我的shell脚本名为mongoLogin.sh,如下所示:
#!/bin/sh
mongo
use demo
show tables
上面的功能是记录mongodb并显示名为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
两种变体都不起作用,因为use demo
不是有效的shell命令。
我没有使用过mongo,但是如果命令接受是从stdin输入的,你可以试试
mongo <<OGNOM
use demo
show tables
OGNOM
确保最终的OGNOM从您的第一列开始!