Ihre Crontab-Linie enthält ein oder mehrere Sternchen *
, die "jederzeit" anzeigen. Wenn diese Zeile durch die Befehlsersetzung ersetzt wird, ist das Ergebnis ungefähr so
echo * * * * * cmd > /path/to/file
Während die meisten weiteren Erweiterungen nicht auf die Ausgabe der Befehlssubstitution angewendet werden, lautet die Pfadnamenerweiterung (ebenso wie die Feldaufteilung) :
Die Ergebnisse der Befehlssubstitution dürfen nicht für eine weitere Tildeerweiterung, Parametererweiterung, Befehlssubstitution oder arithmetische Erweiterung verarbeitet werden. Wenn eine Befehlssubstitution in doppelten Anführungszeichen erfolgt, dürfen die Ergebnisse der Substitution nicht durch Feldaufteilung und Pfadnamenerweiterung ersetzt werden.
Die Pfadnamenerweiterung wird *.txt
zu einer Liste übereinstimmender Dateinamen (Globbing), in der *
alles übereinstimmt. Das Endergebnis ist, dass Sie jeden (nicht versteckten) Dateinamen im Arbeitsverzeichnis erhalten, der für jeden *
in Ihrer Crontab-Zeile aufgeführt ist.
Sie können dies beheben, indem Sie die Erweiterung zitieren, wenn der von Ihnen veröffentlichte Code für einen komplexeren Befehl repräsentativ ist:
sudo bash -c 'echo "$(tail -n 1 /etc/crontab)" > /path/to/file'
aber einfacher verlieren Sie einfach das echo
ganz:
sudo bash -c 'tail -n 1 /etc/crontab > /path/to/file'
Dies sollte tun, was Sie wollen, und es ist auch einfacher (der einzige andere wesentliche Unterschied besteht darin, dass in dieser Version die Feldaufteilung weggelassen wird, die sonst aufgetreten wäre, sodass Leerzeichen nicht reduziert werden).