0

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)'

但是这个案例外壳说

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

还是一样的问题。

所以我有或“没有这样的文件......”与括号转义 - 或“意外的令牌”在其他情况下。

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

4

3 回答 3

3

经过多次组合后,我找到了我们需要强制 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

希望能帮助某人节省时间。

于 2016-04-04T07:13:50.350 回答
0

!/usr/bin/env bash

解决它,而不是标记命令,标记文件

于 2018-09-04T22:17:49.680 回答
-1

进程替换将整个命令放在括号中。

... <(sort ...) ...
于 2016-04-03T22:02:05.550 回答