执行shell脚本直接和通过管道之间的区别

问题描述 投票:1回答:1

我的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
shell
1个回答
0
投票

两种变体都不起作用,因为use demo不是有效的shell命令。

我没有使用过mongo,但是如果命令接受是从stdin输入的,你可以试试

mongo <<OGNOM
use demo
show tables
OGNOM

确保最终的OGNOM从您的第一列开始!

© www.soinside.com 2019 - 2024. All rights reserved.