menghindari tanda kutip ganda dan tanda persen (%) dalam cron


75

Perintah berikut ini berfungsi dari prompt tetapi tidak dari crontab.

 grep abc  /var/log/messages | grep "`date '+%B %d'`" | mail -s"abc log of `hostname`" shantanu.oak+`hostname`@gmail.com

Saya perlu menambahkannya ke cron harian.


Contoh Anda luar biasa,% dikelilingi oleh tanda kutip ganda, sederhana dan kembali. Meninggalkan harapan bahwa kutipan yang lolos bisa bekerja.
tuxayo

Jawaban:


126

Anda harus melarikan diri dari %pertanda. Mereka memiliki arti khusus dalam crontab:

man (5) crontab:

Percent-signs (%) in the command, unless escaped with backslash (\), 
will be changed into newline characters, and all data after the 
first % will be sent to the command as standard input.

7
+1 Sangat menarik, saya juga tidak tahu itu. Terkejut saya belum mengalami ini.
Kyle Smith

3
Yah saya baru saja mengalami ini. Saya menggunakan date +%Fdan mendapatkan tempat
adamo

2
Apakah sintaks ini memiliki kegunaan yang bermanfaat? Dengan SHELL=/bin/bash, saya selalu dapat menulis ulang cat %Hello worldsebagai cat <<<'Hello world'. Saya tidak melihat perlunya sintaksis khusus.
Witiko

@Witiko Jika "sintaks khusus" yang Anda tanyakan adalah backslash untuk melarikan diri persen, maka pertanyaan OP sendiri adalah contoh di mana diperlukan: argumen perintah yang memerlukan persen, terutama program tanggal, yang akan cukup populer di perintah crontab. Jika Anda benar-benar bertanya mengapa cron memiliki gotcha ini di tempat pertama: yaitu: mengganti linefeed di tempat persen, maka saya kira begitu Anda dapat memasok, pada satu baris yang diperlukan crontab, "perintah" yang terdiri dari dua atau lebih banyak perintah tambahan.
gwideman

Yang terakhir. Dan, seperti yang saya sebutkan, orang dapat melakukan hal yang sama dengan bash. Tidak perlu membuang sintaks Cron.
Witiko

7

Ini tidak langsung menjawab pertanyaan Anda, tetapi saya sarankan Anda membuat file skrip di / usr / local / bin (atau ~ / bin atau apa pun yang sesuai) dan menyebutnya dari cron. Lebih mudah untuk menguji dan mengedit.


2
Dalam pengalaman saya, jauh lebih mudah untuk mempertahankan 50 baris dalam crontab daripada mempertahankan 50 file kecil. Anda tentu ingin mengubah skrip yang lebih panjang menjadi file skrip, tetapi melakukannya untuk one-liners mungkin merupakan kerja keras.
Witiko
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.