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

时间:2019-04-30 02:56:11

标签: shell

我的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

1 个答案:

答案 0 :(得分:0)

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

我还没有使用mongo,但是如果命令接受来自标准输入,则可以尝试

mongo <<OGNOM
use demo
show tables
OGNOM

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

相关问题