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

前端之家收集整理的这篇文章主要介绍了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有一个有用的指南.在你的示例中,您只需要删除功能关键字.

猜你在找的Bash相关文章