Dòng crontab của bạn có một hoặc nhiều dấu sao *
trong đó, cho biết "bất cứ lúc nào". Khi dòng đó được thay thế từ thay thế lệnh, kết quả là một cái gì đó như
echo * * * * * cmd > /path/to/file
Mặc dù hầu hết các mở rộng hơn nữa không được áp dụng cho đầu ra của lệnh thay thế, mở rộng tên đường dẫn là (như là tách trường) :
Các kết quả thay thế lệnh sẽ không được xử lý để mở rộng dấu ngã, mở rộng tham số, thay thế lệnh hoặc mở rộng số học. Nếu thay thế lệnh xảy ra bên trong dấu ngoặc kép, việc tách trường và mở rộng tên đường dẫn sẽ không được thực hiện trên kết quả của sự thay thế.
Mở rộng tên đường dẫn là những gì biến *.txt
thành một danh sách tên tệp phù hợp (globalbing), trong đó *
khớp với mọi thứ. Kết quả cuối cùng là bạn nhận được mọi tên tệp (không bị ẩn) trong thư mục làm việc được liệt kê cho mỗi *
trong dòng crontab của bạn.
Bạn có thể khắc phục điều này bằng cách trích dẫn việc mở rộng, nếu mã bạn đã đăng là đại diện cho một lệnh phức tạp hơn:
sudo bash -c 'echo "$(tail -n 1 /etc/crontab)" > /path/to/file'
nhưng đơn giản hơn là chỉ mất echo
hoàn toàn:
sudo bash -c 'tail -n 1 /etc/crontab > /path/to/file'
Điều này sẽ làm những gì bạn muốn và nó cũng đơn giản hơn (sự khác biệt duy nhất về vật liệu là phiên bản này sẽ bỏ qua việc tách trường nếu không sẽ xảy ra, do đó, các khoảng trống sẽ không bị thu gọn).