我有一个看起来像这样的脚本:
#!/bin/bash
function func1() {
echo "HELLO!"
}
export -f func1
function func2() {
echo "HI!!"
func1
}
export -f func2
我在本地启动了一个 hadoop tasktracker,我的 /usr/lib/hadoop/conf/hadoop-env.sh 看起来像这样:
# .. few configuration params
# source my_shell_file.sh
# my_function
当我启动 tasktracker 时,一切都很好。它打印出我在 my_function 中的几个 echo 语句。当我使用“mapper.py”文件启动 hadoop 作业时,它可以正常工作。它甚至采用 my_function 中存在的配置参数。当我将映射器声明为
-mapper 'bash -c "func1 ; python mapper.py"'
然后它抛出这个错误:
/bin/bash: func2: line 1: syntax error: unexpected end of file
/bin/bash: error importing function definition for `func2'
/bin/bash: func1: line 1: syntax error: unexpected end of file
/bin/bash: error importing function definition for `func1'
我不确定这里发生了什么。我尝试了 'sh -c' 而不是 'bash -c' ,但我遇到了同样的问题。
编辑:当我在控制台上“获取”它时,shell 脚本工作正常。它识别控制台上的 shell 文件中定义的函数。
EDIT2:添加了 shell 文件的确切内容。