![如何在容器内运行不带 sh 前缀的脚本](https://linux22.com/image/221801/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%AE%B9%E5%99%A8%E5%86%85%E8%BF%90%E8%A1%8C%E4%B8%8D%E5%B8%A6%20sh%20%E5%89%8D%E7%BC%80%E7%9A%84%E8%84%9A%E6%9C%AC.png)
我们在开放轮班平台上运行容器。应用程序 Pod 运行良好。我们可以使用以下命令登录 Pod
oc exec -it <podname> -- /bin/bash
还tried /bin/sh
登录后,我们尝试执行特定文件夹(/opt/scripts)中可用的脚本
当我们运行时sh script
它就起作用了。当我们运行时script
没有sh
它抛出command not found
在脚本中我们有#!bin/ksh
(尝试使用 bash 和 sh)
如何运行script
不带sh
前缀的
更新: 尝试模拟容器内的场景
下面是容器内安装的shell
sh-4.4$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
这是一个脚本。第一行已更新
sh-4.4$ more tRun
#!/bin/sh
仅以前缀sh
或运行bash
sh-4.4$ tRun
sh: tRun: command not found
sh-4.4$ sh tRun
JAVA_HOME is not set. Unexpected results may occur.
Set JAVA_HOME to the directory of your local JDK to avoid this message.
Please enter aguments:
^C
sh-4.4$ bash tRun
JAVA_HOME is not set. Unexpected results may occur.
Set JAVA_HOME to the directory of your local JDK to avoid this message.
Please enter aguments:
^C
答案1
要“独立”运行,您的脚本需要其 shebang 中给出的命令可用。既然如此/bin/ksh
,它需要ksh
安装在您的容器映像中。
如果您的脚本实际上可以正确使用sh
,您可以将其 shebang 更改为#!/bin/sh
(或者更好的是,#!/bin/sh -
)。