用变量替换命令会导致找不到命令?

时间:2019-02-23 15:59:22

标签: bash

我正在使用BASH脚本:

var randomImage = function() {

 var fileNames = [
    "image1.png",
    "image2.jpg",
    "image3.png",
];

var randomIndex = Math.Round(Math.random() * fileNames.length);

//Change myImage to the id of your image. (example: <img id = "myImage" src = "meme.png"></img>)
document.getElementById("myImage").src = filesNames[randomIndex];
};

randomImage();
setInterval(randomImage, 1000);

结果:

#!/usr/bin/env bash

PATH=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

YAML=$(envsubst < ${PATH}/test.yml)

echo "${YAML}"

我看到在命令替换中包含变量会导致这种错误。 如果我不使用任何东西:

./test.sh: line 5: envsubst: command not found

然后我预期脚本执行成功。

我在各处使用引号尝试了不同的语法,但没有帮助。

如何在命令替换中成功使用变量?

bash版本:

YAML=$(envsubst < ./test.yml)

更新:一个重复的问题。在这里找到答案: https://stackoverflow.com/a/5642584/5935309

1 个答案:

答案 0 :(得分:1)

问题是您正在更改PATH,Bash在内部使用它来定义在哪里寻找程序(以及顺序)。

您将PATH更改为仅包含当前工作目录,而不是envsubst所在的地方。

解决方案是使用与PATH不同的东西,例如FILE_PATH