2011-03-29 90 views
33

我試圖讓cronjob將管道輸出轉換爲指定(文件夾)位置中的日期文件。/bin/sh:語法錯誤:未終止的帶引號的字符串

我的crontab條目看起來是這樣的:

* * * * * /some/path/test.sh >> $(date "+/home/oompah/logs/%Y%m%d.test.log") 

我不明白的是,當我在控制檯輸入此命令時,我得到正確的字符串:

echo $(date "+/home/oompah/logs/%Y%m%d.test.log") 
/home/oompah/logs/20110329.test.log 

什麼造成這個錯誤,我該如何解決它?

bash的版本信息是:

GNU的bash,版本4.1.5(1)-release下(x86_64-PC-Linux的GNU)

+1

屬於http://askubuntu.com或http://unix.stackexchange.com – 2011-03-29 14:20:07

+0

@Let_Me_Be:雖然我可以看到你的觀點,但是它存在一個真正的危險,因爲它會將自身展現得如此之細,以至於它最終會以幾個「專家」網站不超過幾十人,或者上百人的幾百人來回答問題。這個問題在這裏是相關的,因爲雖然我保持簡單(爲了簡潔明瞭),但它可以很容易地擴展到包含Python和C++的問題,這些問題是由cron運行的任務。 – oompahloompah 2011-03-29 14:34:14

+0

那麼,這是一個meta的討論。 – 2011-03-29 14:53:18

回答

79

你應該excape百分號在crontab:

* * * * * /some/path/test.sh >> $(date "+/home/oompah/logs/\%Y\%m\%d.test.log") 

百分比(%)標誌在的crontab特殊的意義。它們被解釋爲換行符。

+1

非常感謝。這解決了這個問題。之前我應該​​已經注意到了,因爲vim編輯器着色顯示字符串沒有關閉。咄!無論如何,無論如何,你救了我一個沮喪的下午。:) – oompahloompah 2011-03-29 14:56:49

+0

不客氣。我也多次與這些百分比跡象鬥爭。最後我學到了;) – bmk 2011-03-29 15:07:01

+0

知道的非常有用 - 剛剛被這個咬了! – 2013-07-11 11:51:06

3

把date命令的腳本中。 cron不一定運行你認爲它的shell。

+0

+1雙峯如措施:) – user237419 2011-03-29 14:14:18

+0

我不知道我明白你的意思。我希望將腳本的輸出發送到文件。我不喜歡重寫腳本的前景,以便所有的打印語句都被重定向到文件而不是stdout - 除非我錯過了某些東西? - 請澄清 – oompahloompah 2011-03-29 14:30:44

+0

在crontab中不需要$(date ...)。把它放在test.sh裏面。 – bmargulies 2011-03-29 15:36:09

0

請確保您有shebang #!/bin/bash作爲腳本的第一行。另外,如bmargulies所述,如果可能的話,將date命令放入腳本中。

相關問題