使用nohup调用时,为什么以下bash脚本无法正常工作?

时间:2014-07-24 21:35:16

标签: bash shell nohup

如下的脚本:

#!/bin/bash

function hello {

        echo "Hello World"

}

hello

会正常工作但我用nohup

打电话时
nohup ./myScript.sh 

脚本不再有效,打印出以下内容:

./myScript.sh: 5: ./myScript.sh: function: not found
Hello World
./myScript.sh: 9: ./myScript.sh: Syntax error: "}" unexpected

我知道将nohup用于此脚本是没有意义的,因为它运行得相当快,但我有另一个脚本需要几个小时才能运行,我已经在其中使用了该函数语法。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:5)

请注意,对于declare a function in POSIX standard shell,您只需编写函数名称,后跟一对空括号,以及大括号中的正文:

#!/bin/bash

hello() {
    echo "Hello World"
}

hello

有些shell(如bash)也接受function关键字来声明函数,但根据您的错误消息,它看起来像您正在使用的shell不接受它。为了便于携带,最好使用POSIX标准声明样式。

您看到直接运行脚本和在nohup下运行脚本之间的区别的原因是文件开头的空白行。 #!需要是文件的前两个字符才能指定解释器,否则这只是一个注释。看起来当从Bash shell中执行时,脚本会被Bash解释并识别Bash扩展。但是当从nohup运行时,它会被sh解释,在某些系统上是dash的更简单的shell,它只支持上面的POSIX语法。