将多个函数传递给远程 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
.
下创建一个目录
我正在编写能够部署和配置整个 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
.