Я могу запустить код из терминала, но ту же команду, выдающую ошибку при запуске в сценарии оболочки

Я новичок в сценариях Unix и shell, я могу запустить код из терминала, но ту же команду, выдающую ошибку при запуске в сценарии оболочки.

#!/bin/bash diff <((sort doc1) <(sort doc2)) | grep -x '.\{6\}' >sample.txt 

Я получаю эту ошибку при запуске оболочки:

 /App$ sh filediff.sh filediff.sh: 4: filediff.sh: Syntax error: "(" unexpected 

  • Может кто-то уточнить: «случай»: $ PATH: «in» в скрипте?
  • Вырезать поле один за другим в сценарии оболочки
  • C Shell отменил файл
  • вставить значение из ссылочного файла
  • Bash: синтаксическая ошибка около неожиданного токена 'done'
  • Перенаправить вывод команды в два разных файла
  • Нажмите любую клавишу, чтобы остановить цикл
  • один лайнер для использования памяти
  • 2 Solutions collect form web for “Я могу запустить код из терминала, но ту же команду, выдающую ошибку при запуске в сценарии оболочки”

    Когда вы запускаете команду diff в обычной оболочке, вы используете текущую оболочку (в основном bash).

    Вы отступали, чтобы использовать оболочку bash для своего скрипта, но если вы вызываете свой скрипт с помощью «sh filediff.sh», вы вызываете sh-Shell, который немного отличается от bash.

    Вы можете вызвать свой скрипт с помощью

     bash filediff.sh 

    или вы выполняете его с помощью

     chmod +x filediff.sh 

    и назовите его

     ./filediff.sh 

    Команда diff работает для анализа двух файлов и печатает строки, которые отличаются друг от друга. Вы не предоставляете правильные входные файлы для команды diff:

    Простой модифицированный рабочий скрипт:

     sort doc1 | tee tempdoc1 sort doc2 | tee tempdoc2 diff tempdoc1 tempdoc2 | grep -x '.\{6\}' > sample.txt echo "Following is difference:" cat sample.txt 
    Linux и Unix - лучшая ОС в мире.