В строке crontab есть одна или несколько звездочек *
, указывающих «в любое время». Когда эта строка подставляется из подстановки команд, результат выглядит примерно так:
echo * * * * * cmd > /path/to/file
В то время как большинство дальнейшие разложения не применяются к выходу подстановки команд, расширение путь является (как это поле разложения) :
Результаты подстановки команд не должны обрабатываться для дальнейшего расширения тильды, расширения параметров, подстановки команд или арифметического расширения. Если подстановка команд происходит внутри двойных кавычек, разделение полей и расширение пути не должны выполняться по результатам подстановки.
Расширение пути - это то, что превращается *.txt
в список совпадающих имен файлов (глобализация), где *
совпадает все. Конечным результатом является то, что вы получаете каждое (не скрытое) имя файла в рабочем каталоге, указанное для каждого *
в строке crontab.
Вы можете исправить это, заключив в кавычки расширение, если код, который вы разместили, был представителем более сложной команды:
sudo bash -c 'echo "$(tail -n 1 /etc/crontab)" > /path/to/file'
но проще говоря просто потерять echo
полностью
sudo bash -c 'tail -n 1 /etc/crontab > /path/to/file'
Это должно делать то, что вы хотите, и это также проще (единственное другое отличие материала в том, что в этой версии пропущено разделение полей, которое в противном случае произошло бы, поэтому пробелы не будут свернуты).