无法理解简单的bash脚本

时间:2018-07-15 07:54:13

标签: linux bash

我对bash脚本非常陌生,因此我无法真正理解下面的内容:

[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

我猜这个双方括号是一个if语句。而且我了解到我们将“主机* \ n \ tStrictHostKeyChecking否\ n \ n” 转换为 config 文件,但是那里还有什么。一些新手的文档或教程非常感谢。预先感谢!

2 个答案:

答案 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已经存在,如果不存在则将失败。