Loading

/bin/sh -c 的作用

背景

在kubernetes的yaml文件的command字段中,经常使用sh -c的形式:

command: ["/bin/sh", "-c", "echo postStart... > /usr/share/nginx/html/index.html"]

那么,/bin/sh -c 是什么意思呢?为什么不直接使用 echo 命令?

那是因为命令解释器(这里是/bin/sh) 有两种工作模式:交互模式和非交互模式。

1. 交互模式

交互模式如下图所示,就是使用 ssh 连接到 Linux 服务器上,然后在终端上敲入命令就可以显示对应结果。这样与终端进行交互执行命令的方式就称为交互模式。

2. 非交互模式

非交互模式如下图所示,非交互模式就是调用 bash 解释器,通过 bash -c 后接命令的形式来解释执行命令。

而在 kubernetes 的 yaml 文件中,command 字段(底层也就是 golang 程序) 显然需要使用非交互模式,通过命令解释器来执行命令,而不是通过ssh登录之后与终端交互。

在影响权限上的区别可以参照:https://blog.csdn.net/BobChill/article/details/84647575

posted @ 2021-05-28 10:39  拾月凄辰  阅读(14818)  评论(0编辑  收藏  举报