使用COMM和SORT的Bash脚本在意外令牌附近发出语法错误

时间:2016-04-03 21:53:04

标签: bash comm

Linux,CentOS - 比较2个文件我使用命令

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

它适用于shell,但是当我尝试创建一个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

我已经尝试过使用圆括号转换的变体,例如

sort\(file1.txt\)

sort'(file1.txt)'

但是这个案例shell说

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“没有这样的文件...”,括号的转义 - 或其他情况下的“意外令牌”。

提前感谢您尝试的任何想法,可能应该是正确的“混合”语法?

3 个答案:

答案 0 :(得分: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 :(得分:0)

!/ usr / bin / env bash

要解决此问题,而不是标记命令,而是标记文件

答案 2 :(得分:-1)

进程替换将整个命令放入parens。

... <(sort ...) ...