Синтаксическая ошибка рядом с неожиданным токеном `(‘
Когда я использую код ниже в терминале SSH для CentOS, он работает нормально:
Но если я помещаю тот же строчный код в сценарий оболочки (test.sh) и запускаю сценарий оболочки из терминала, он выдаст ошибку, как это
Как я могу решить эту проблему?
Подстановка процессов не определен POSIX, поэтому не поддерживает все POSIX оболочки, только некоторые оболочки , как bash , zsh , ksh88 , ksh93 поддержка.
В Centos системе /bin/sh есть символическая ссылка на /bin/bash . Когда bash вызывается с именем sh , bash переходит в режим posix ( Bash Startup Files — вызывается с именем sh ). В режиме posix, process substitution не поддерживается, вызывает синтаксическую ошибку.
Скрипт должен работать, если вы звоните bash напрямую bash test.sh . Если нет, возможно bash , перешел в режим posix. Это может произойти, если вы начинаете bash с —posix аргумента или переменная POSIXLY_CORRECT установлена при bash запуске:
Или bash построен с —enable-strict-posix-default опцией.
Здесь вам не нужно подменять процессы, вы можете использовать стандартные каналы оболочки:
— это стандартный способ сказать, paste чтобы прочитать данные из стандартного ввода. В некоторых paste реализациях вы можете опустить его, хотя это не стандартно.
Это было бы полезно при вставке вывода более чем одной команды, например:
На системах, которые поддерживают /dev/fd/n , это можно сделать sh с помощью:
Источник