crontab -l | { cat; echo "0 0 * * * /path/to/cron/job"; } | crontab -
我从网上获取了这一行,以添加一个新的 cron 作业。它运作良好且良好。我心里有疑问,
1)为什么我们需要这里的大括号(或者我们可以使用单引号),
{ cat; echo "0 0 * * * /path/to/cron/job"; }
2)为什么我们需要cat;
这里的命令?
3) crontab -
.如果我的理解是正确的,是否-
会被管道中上一个命令的输出替换?
答案1
1)为什么我们需要大括号
因为您需要将 的输出和tocat
的输出通过管道传输。如果没有花括号,您将无法将两个命令的输出组装在一个管道中。echo
crontab -
(或者我们可以在这里使用单引号)
没有。 ... | 'cat; echo "0 0 * * * /path/to/cron/job"' | ...
意思是“通过管道传输到名为cat; echo "0 0 * * * /path/to/cron/job"
”的可执行文件。这没有道理。
2)为什么我们需要
cat;
这里的命令?
你不知道。您可以更有效地编写相同的内容:
{ crontab -l; echo '0 0 * * * /path/to/cron/job'; } | crontab -
3)
crontab -
.如果我的理解是正确的,是否-
会被管道中上一个命令的输出替换?
是的,但那是因为crontab
特别支持这一点。使用-
来表示stdin
和/或是sdtout
许多命令都可以理解的约定,但它只是一个约定。它不是由 shell 强制执行的,例如>file
或| command
。