unix – 运行shell脚本为./script.sh和sh script.sh有什么区别?

我有一个看起来像这样的脚本
#!/bin/bash

function something() {
 echo "Hello World!!"
}

something | tee logfile

我已经设置了这个文件的执行权限,当我尝试运行这样的文件

$./script.sh

它运行完全正常,但是当我在这样的命令行上运行它

$sh script.sh

它抛出一个错误.为什么会发生这种情况,以及我可以解决这个问题的方法.

以./script.sh运行它将使内核读取第一行(shebang),然后调用bash来解释脚本.以sh脚本运行它.sh使用你的系统认的任何shell(在Ubuntu这是Dash,这是sh兼容,但不支持Bash的一些额外的功能).

您可以通过调用它作为bash script.sh来修复它,或者如果它是您的机器,您可以将/ bin / sh更改为bash,而不是任何它当前(通常只是通过符号链接 – rm / bin / sh&&&& ln -s / bin / bash / bin / sh).或者你可以直接使用./script.sh,如果已经正常工作;)

如果您的shell确实是破折号,并且您想修改脚本以兼容,则https://wiki.ubuntu.com/DashAsBinSh一个有用的指南.在你的示例中,您只需要删除功能关键字.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...