我有一个看起来像这样的脚本
#!/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有一个有用的指南.在你的示例中,您只需要删除该功能关键字.