将多个函数传递给远程 shell/ mkdir 找不到目录

passing multiple functions to remote shell/ mkdir cannot find directory

我正在编写能够部署和配置整个 elasticsearch 集群的 BASH 脚本。目前我有两个安装程序脚本,以及处理所有 SSH 逻辑和安全配置的配置脚本。

除了两个功能外,一切似乎都很完美。

    echo "Transmitting functions and arrays for remote execution!"
    ssh -T "root@$kbip" <<-LIMITBREAK
        eval `typeset -p kibConfigSer`
        eval `typeset -p kibConfigChan`
        eval `typeset -p esip`
        `declare -f checkLocalKibanaConfig`; checkLocalKibanaConfig
        `declare -f createDirectories`; createDirectories
    LIMITBREAK
        echo
        echo "Transmitting functions and array for remote execution!"
        ssh -T "root@$allnodes[x]" <<-LIMITBREAK
            eval `typeset -p esConfig`
            `declare -f checkLocalElasticConfig`; checkLocalElasticConfig
            `declare -f createDirectories`; createDirectories
        LIMITBREAK

这些是我用来在远程 shell 中定义函数的 HEREDOC。目前第一个声明工作正常。它能够传递包含所有配置设置的数组 esConfig,函数 checkLocalElasticConfig 已定义并且能够访问数组中的字符串。

但是,无论我尝试什么,第二个声明都没有任何作用。该逻辑检查 kibana directory/elastic 目录是否存在,并成功检查 certs 目录是否存在。但是当它试图执行 mkdir 命令时...

mkdir: Cannot create directory '/etc/directory/certs': No such file or directory

我完全被难住了。我知道 etc 存在,我知道该目录存在,并且不存在此功能的证书:

function createDirectories () 
{
    #Checks if ElasticSearch is present
    if [ -d "/etc/elasticsearch" ] 
    then
        if [ -d "/etc/elasticsearch/certs" ] 
        then
            echo "Directory /etc/elasticsearch/certs exists." 
        else
            echo "/etc/elasticsearch/certs in ElasticSearch does not exist! Making directory!"
            mkdir "/etc/elasticsearch/certs"
        fi
    fi

    #Checks if Kibana is present
    if [ -d "/etc/kibana" ] 
    then
        if [ -d "/etc/kibana/certs" ] 
        then
            echo "Directory /etc/kibana/certs exists." 
        else
            echo "/etc/kibana/certs in Kibana does not exist! Making directory!"
            mkdir "/etc/Kibana/certs"
        fi
    fi
}

应该处理。

此脚本的目的是 createDirectory 函数可供本地使用,并在必要时定义为在配置群集节点时远程使用。

知道我做错了什么吗?或者我可以做得更好?

Linux 区分大小写。您检查 if [ -d "/etc/kibana" ]mkdir 试图在 /etc/Kibana.

下创建一个目录