2010-10-13 45 views
1

在寫作顛覆一個pre-commit鉤子,我在的情況下我對svnlook調用作爲在提交事務期間,「svnlook cat」會被強制輸出格式正確的文本嗎?

MESSAGE=`svnlook cat -t $TXN $REPOS $FILE` 

導致返回值由一個單一的,不斷線的正確格式的文件,而不是( s)在嘗試提交中發生了變化。這是有問題的,因爲源文件的格式對編譯很重要。任何想法爲什麼這一切都結束在一條線上?我錯過了什麼嗎?

回答

1

格式仍然存在,但在您嘗試使用$MESSAGE未加引號時會消失。除非受引號保護,否則外殼將所有空白序列轉換爲單個空間。舉一個例子:

$ var='foo 
    bar' 
$ echo $var 
> foo bar 
$ echo "$var" 
> foo 
> bar 
$ var='foo 
    bar' 
$ echo $var 
> foo bar 
$ echo "$var" 
> foo 
> bar 
0

我剛碰到同樣的問題,條件是文件中的結尾由單個CR(0x0D)組成。它適用於LF(0x0A)和CRLF(0x0D0A)。 shell命令cat有同樣的問題。

編輯:如果在perl腳本中使用,結果是一個連續的行。如果直接在shell命令行上使用,結果是整行會垂直混合成一條短行。嚴格的技術性,這是正確的結果 - 沒有換行,只是回車。但它沒有太大的實用價值。