2017-04-03 98 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:没有这样的文件或目录 –