cat —— 文件串联

cat命令可用于连接两个或多个文件的内容。用法是cat firstfile secondfile ...

滥用 cat

如果你发现自己要在 ebuild 中使用cat,请停止并重新考虑。因为这几乎总是没有必要的。

格式为cat somefile | somecommand的所有用法都是愚蠢的,应避免使用。形式somecommand < somefile执行相同的操作,并且不涉及额外的复制和管道。使用许多标准实用程序下somecommand somefile形式也可以使用。

也不需要使用foo=$(cat somefile)将文件内容放入变量foo中。命令foo=$(<somefile)同样有效,不需要派生。同样,cat file | xargs cmdxargs cmd < file可以替换为cmd $(<file)

最后,cat foo > bar在 foo 是单个文件的情况下,通常可以用cp -f foo bar代替。

here 文档

另一方面,cat它对于所谓的“here”文档非常有用,例如 sendmail-8.13.3ebuild 中的以下示例 :

src_install() {
    # ...
    cat <<- EOF > "${D}/etc/mail/trusted-users" || die
        # trusted-users - users that can send mail as others without a warning
        # apache, mailman, majordomo, uucp are good candidates
    EOF
    # ...
}

在此示例中,src_install中使用cat创建${D}/etc/mail/trusted-users文件。具体来说,新文件将包含cat行和 ebuild 中带有EOF的行。

有趣的连字符<<-是一种>=bash-2.05 语法,它告诉cat剥离前导制表符(请注意,当您要复制示例时,必须用制表符替换前导空格),因此,如 Azarah 简而言之,“我们不会让 ebuilds 从空格效果上看”。对于上述示例中的小文件,此处的一组文档比${FILESDIR}中浮动的等效文件束更为优雅,并且更易于维护。如果出于某种原因需要保留前导空格,则只需使用<<而不是<<-即可获得所需的效果。

results matching ""

    No results matching ""