kaçış çift tırnak ve cron yüzde işaretleri (%)


75

Aşağıdaki komut istemden çalışır, ancak crontab'dan değil.

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

Günlük cronuma eklemem gerekiyor.


Örneği şaşırtıcı,% çift, basit ve arka tırnaklarla çevrilidir. Kaçan teklifin işe yarayacağına dair hiçbir ümit bırakmamak.
tuxayo

Yanıtlar:


126

Kaçmak zorunda %işaretleri. Crontab'larda özel bir anlamı var:

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 Çok intersting, ben de bilmiyordum. Buna hiç rastlamadığım için şaşırdım.
Kyle Smith

3
Ben sadece buna rastladım. Ben kullanıyordum date +%Fve hiçbir yerde başlamıştı
adamo

2
Bu sözdiziminin herhangi bir faydalı kullanımı var mı? İle SHELL=/bin/bash, her zaman yeniden yazabilirsiniz cat %Hello worldolarak cat <<<'Hello world'. Özel bir sözdizimi için ihtiyaç görmüyorum.
Witiko,

@Witiko Eğer sorduğun "özel sözdizimi" yüzde kaçmak için ters eğik çizgi ise, OP'nin kendi sorusu gerekli olduğu bir örnektir: yüzde gerektiren, özellikle tarih programında yüzde popüler komutlar crontab komutu. Aslında neden cron'un bu yakalamayı ilk elden aldığını soruyorsanız: yani: yüzde yerine satır beslemenin yerine geçiyorsa, o zaman sanırım crontab'ın gerektirdiği tek bir satırda iki taneden oluşan bir "komut" verebilirsiniz. veya daha fazla yardımcı komut.
gwideman

İkincisi. Ve dediğim gibi, kişi bash ile aynı şeyi yapabilir. Cron'un sözdizimini alt etmeye gerek yok.
Witiko

7

Bu doğrudan sorunuzu yanıtlamıyor, ancak / usr / local / bin'de (veya ~ / bin ya da uygun olanı) bir komut dosyası oluşturmanızı ve bunu cron'dan çağırmanızı öneririm. Test etmek ve düzenlemek daha kolaydır.


2
Benim tecrübeme göre, crontab'ta 50 satır bulundurmak, 50 küçük dosyayı saklamaktan çok daha kolaydır. Daha uzun komut dosyalarını kesinlikle komut dosyalarına dönüştürmek isteyeceksiniz, ancak bunu bir liner için yapmak çok zor olabilir.
Witiko,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.