加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 18:53:06 所属栏目:安全 来源:网络整理
导读:我有一个看起来像这样的脚本 #!/bin/bashfunction something() { echo "hello world!!"}something | tee logfile 我已经设置了这个文件的执行权限,当我尝试运行这样的文件 $./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有一个有用的指南.在你的示例中,您只需要删除该功能关键字.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读