diff命令在bash shell脚本中不起作用

时间:2017-09-25 08:26:36

标签: bash shell unix diff tar

我正在尝试运行

diff <(tar -tvf HIVE_CLIENT.tar.gz | sort) <(tar -tvf YARN_CLIENT.tar.gz | sort) 

将此命令放入脚本中,当我执行脚本时显示错误

syntax error near unexpected token `(' "

但是当我没有放入内部脚本而不是直接从shell运行时,它就可以工作。

2 个答案:

答案 0 :(得分:1)

可能你的脚本是使用/bin/sh而不是/bin/bash运行的,但命令替换是一个bash功能,而不是在sh中实现。所以我想你使用bash作为你的shell,这就是它在命令行工作的原因。

尝试将此前缀添加到您的脚本中,并删除现有的shebang(如#!/bin/sh或类似内容):

#!/bin/bash

答案 1 :(得分:1)

您应该尝试以下两项操作:

  1. 使用#!/bin/bash作为你的shebang(脚本的第一行)

  2. 根据您的bash可能需要这样做,仅在操作1无效的情况下使用。使用以下命令在进程替换所需的posix模式之间切换:

    set +o posix 
    diff <(tar -tvf HIVE_CLIENT.tar.gz | sort) <(tar -tvf YARN_CLIENT.tar.gz | sort)
    set -o posix
    

    示例:

    wc -l <(ls -lrt)
    sh: syntax error near unexpected token `('
    
    set +o posix  
    wc -l <(ls -lrt)
    114 /dev/fd/00
    
    set -o posix
    wc -l <(ls -lrt)
    sh: syntax error near unexpected token `('