2017-04-03 125 views
1

我試圖用「comm」來比較2個文件,並保存它們之間的區別是在第三個文件中,如下面的示例。通用命令和diff命令上的Bash Shell Systax錯誤

if [ -e "$updated_file_name_$day$month$year.txt"]; 
then 
    comm -3 < (sort $updated_file_name".txt") < (sort $updated_file_name_$day$month$year.txt) > $updated_file_name_$day$month$year_V$i.txt 
else 
    mv $updated_file_name".txt" $updated_file_name_$day$month$year.txt 
fi 

它搜索或文件的以前版本,如果它發現它比這兩個文件都應該進行分類和比較,比的結果將被保存在第三個文件,否則它只是保存新文件作爲該日期的原始文件。

我在shell控制檯上用它作爲「bash -c'comm -3 [命令的其餘部分]」,它工作正常,但無論出於何種原因,它在我的腳本上不工作,我總是得到錯誤的語法錯誤。

我也用「差異,而不是‘COMM嘗試’,但我得到同樣的,我不`噸知道是什麼問題

以下是錯誤消息:

bash: -c: line 0: syntax error near unexpected token `(' 
bash: -c: line 0: `diff < (sort $updated_file_name".txt") < (sort $updated_file_name"_"$day$month$year.txt) > $updated_file_name"_"$day$month$year_V$i".txt"' 
+0

說什麼錯誤消息的變量? – suleiman

+0

問題已更新。 –

+1

我相信流程替代是沒有空格的。也許'<(command)'而不是'<(command)'? – odradek

回答

3

夫婦事情解決在這裏,

  1. <()工藝替代bash功能,您proabably需要用適當的SH運行e-bang集合,即#!/bin/bash或取決於您的發行版,其中bash已安裝
  2. 應該不存在空格,即使用comm -3 <(sort $updated_file_name".txt") <(sort $updated_file_name_$day$month$year.txt)是正確的方法。

另一個運的問題是sort無法打開文件,它在得到錯誤。

推薦,妥善包裹內{}

comm -3 <(sort ${updated_file_name}".txt") <(sort ${updated_file_name}_${day}${month}${year}".txt") 
+0

這是另一個問題。 comm命令被執行,但無論出於什麼原因,它都沒有得到我的變量作爲文件名。我得到如下錯誤: 排序:打開失敗:_.txt:沒有這樣的文件或目錄 我也不能使用comm命令使用「bash -c」之前。 –

+0

@ Otorrinolaringologista-man:請參考我最新的更新,看看是否可以解決您的問題 – Inian

+0

嗯,我仍然收到以下錯誤消息: 排序:打開失敗:_.txt:沒有這樣的文件或目錄 –