我对bash脚本非常陌生,因此我无法真正理解下面的内容:
[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
我猜这个双方括号是一个if语句。而且我了解到我们将“主机* \ n \ tStrictHostKeyChecking否\ n \ n” 转换为 config 文件,但是那里还有什么。一些新手的文档或教程非常感谢。预先感谢!
答案 0 :(得分:6)
[[ ... ]]
是对其中的语句求值并返回true或false的函数。
-f
表示“文件存在”:http://tldp.org/LDP/abs/html/fto.html
&&
的意思是“和”,这意味着如果前一条语句返回true,则执行下一条语句。
echo -e
意味着将第二个参数中的字符串打印到stdout并解释转义序列,例如“ \ n”。
> ~/.ssh/config
意味着将前面语句的标准输出写入“〜/ .ssh / config”
这种方法的长手之处(可能更容易理解)是:
if [[ -f /.dockerenv ]]; then
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
fi
答案 1 :(得分:4)
简而言之:它告诉ssh将主机密钥自动添加到已知主机,而不管它是否已知或已更改。
这是以下项的简写:
if [[ -f /.dockerenv ]]; then
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
fi
[[...]]
是bash内置测试。 &&
的意思是,如果前一个命令成功(返回0
),则运行以下命令。即如果/.dockerenv
文件存在并且是文件,它将回显(解释反斜杠转义-e
):
Host *
StrictHostKeyChecking no
随后在~/.ssh/config
中添加了两条训练换行符(替换了可能存在的所有内容)。但是,它假定目录~/.ssh
已经存在,如果不存在则将失败。