2016-04-03 59 views
0

的Linux,CentOS的語法錯誤 - 比較2個文件我用命令bash腳本COMM和排序問題近意外的標記

comm --check-order -1 --output-delimiter=----- <sort(file1.txt) <sort (file3.txt) > result.txt ; 

和它的作品上的外殼,但是當我試圖創建一個bash文件 - 我有

syntax error near unexpected token `(' 

劇本是最簡單的

#!/bin/bash 
cd /var/www/html/compare/ ; 
comm --check-order -1 --output-delimiter=----- <sort(file1.txt) <sort (file3.txt) > result.txt ; 
exit ; 
    sh 

我已經嘗試過用圓括號升逃逸變化IKE

sort\(file1.txt\) 

sort'(file1.txt)' 

,但這種情況下殼說

sort(file1.txt)...: No such file or directory 

我有絕對路徑試過像

<sort\(var/www/html/compare/file1.txt\) 

相同的結果, 「沒有這樣的文件」

,我已經嘗試運行與變化的劇本就像

sh /a/compare.sh 
bash /a/compare.sh 
chmod +x /a/compare.sh; ./a/compare.sh 

還是同樣的問題。

所以我有OR「沒有這樣的文件...」與括號轉義 - 或「其他情況下的意外令牌」。

在此先感謝您的任何想法嘗試,可能應該是一個正確的「混合」的語法?

+0

[shellcheck to rescue!](http://www.shellcheck.net/) – jDo

回答

1

經過多次組合,我找到了解決方案,我們需要強制BASH進行一些特定的轉義。 該劇本作品

#!/bin/bash 
cd /var/www/html/compare/ ; 
`bash -c "comm --check-order -1 --output-delimiter=----- <(sort file1.txt) <(sort file2.txt) > result.txt" ` ; 
exit ; 
    sh 

希望能幫助別人節省時間。

1

流程替換將整個命令放在parens中。

... <(sort ...) ... 
+0

我沒有明白你的意思。我試着像你說的語法... ... Serge

+0

這句法並不像我說的那樣。 –