当从另一个函数调用时,函数中的子shell无法找到基本bash命令

当从另一个函数调用时,函数中的子shell无法找到基本bash命令,bash,eval,subshell,Bash,Eval,Subshell,我有以下bash脚本(这是更复杂脚本的简化版本) 当我运行它时,我得到以下输出: + execute 'chmod 777 build.test-case.sh' ++ chmod 777 build.test-case.sh + runCommand build.test-case.sh + PATH=build.test-case.sh + execute 'chmod 777 build.test-case.sh' ++ chmod 777 build.test-case.sh ./bui

我有以下bash脚本(这是更复杂脚本的简化版本)

当我运行它时,我得到以下输出:

+ execute 'chmod 777 build.test-case.sh'
++ chmod 777 build.test-case.sh
+ runCommand build.test-case.sh
+ PATH=build.test-case.sh
+ execute 'chmod 777 build.test-case.sh'
++ chmod 777 build.test-case.sh
./build.test-case.sh: line 5: chmod: command not found
因此,
chmod
在直接调用
execute
函数时起作用,但在从另一个函数调用时失败,即使调试输出似乎完全相同


有人能解释这种行为吗?

问题是您正在覆盖变量,该变量包含指向二进制文件所在目录的路径,如
chmod
one,因此无法找到它

如果为
runCommand()
函数使用另一个变量,而不是
PATH
变量,它应该可以工作,如下所示:

function runCommand() {
    VAR="${1}"
    execute "chmod 777 ${VAR}"
}

嗯,那是我脸上的蛋。这将教会我不要坚持我自己的标准,永远不要使用所有的caps变量。:-)
function runCommand() {
    VAR="${1}"
    execute "chmod 777 ${VAR}"
}