CentOS 7 shell脚本解释器

CentOS 7 shell脚本解释器

我开始编写一个在 CentOS 7 中运行的 shell 脚本。它应该调用哪个解释器,shebang 行应该是什么样子?

我试过这个:

#!/bin/sh  

但是当我输入时cd /binls -al就会出现数百个子目录,其中没有一个是sh.我应该使用哪一个?该脚本将运行一些 Maven 命令。

答案1

实际上,在 CentOS 7 上,/bin/sh是 的符号链接/bin/bash,这是大多数 Linux 发行版上默认提供的 shell。

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4  9 febr. 08:21 /bin/sh -> bash

(如果上面的命令返回No such file or directory,那么你是对的,你会遇到问题。然后你可以运行which sh来知道正确的路径)

因此,如果您的输出与我相同,则使用#!/bin/sh#!/bin/bash是相同的。

作为替代方案,您可以使用这个 shebang:#!/usr/bin/env sh#!/usr/bin/env bash。在这种情况下,它将运行PATH 中的第一个sh或可用的内容,无论在、或任何地方设置。尽管它对于可移植性来说可能很方便,但请注意,如果您的 PATH 中有多个指定的可执行文件,则可能会存在一些安全问题。bashsh/bin/usr/binsh

答案2

您可以让它调用您想要的任何解释器(bash、csh、zsh、sh、perl 或任何其他解释器)。

#!/bin/sh是 POSIXly 正确的并且它应该运行。

的输出是什么ls /bin | grep s

另外,您可能需要检查您的文件权限。当我编写第一个脚本时,这让我丧命(chmod +x ./myscript.sh)。

相关内容