Краткий ответ таков <
, >
и их варианты имеют наивысший приоритет связывания (самое жесткое связывание), за которым следует |
, а затем &&
и ||
, а затем ;
и &
. Таким образом, только по echo "Thumbnail creation failed"
трубопроводу tee
.
Несколько более длинный ответ указывает на то, что на самом деле наивысший приоритет имеет группировка, которая может быть указана в скобках или фигурных скобках. Например,
A && (B; C)
а также
A && { B; C;}
примерно эквивалентны
if A
then
B
C
fi
Ноты:
- Скобки дают вам скорлупу; команды
B
и C
выполняются в дочернем процессе. Поэтому такие команды, как присвоение переменных, не cd
будут влиять на родительскую оболочку. Команды в фигурных скобках выполняются в том же процессе, что и A
команда. Следовательно, конструкция скобки A && { B; C;}
ближе к if
- then
- else
конструкции.
- В синтаксисе скобок должен быть пробел после
{
и a ;
(или a &
, или перевод строки) перед }
.
Подробнее читайте в разделе Что такое операторы управления и перенаправления оболочки? и когда «если» не нужно? (особенно мои ответы).
Для получения дополнительной информации см. Справочную страницу bash (1) и
спецификацию / определение POSIX языка команд оболочки , в частности раздел 2.9, Команды оболочки
и раздел 2.10.2, Правила грамматики оболочки . Это попытка предоставить некоторый контекст для вышеупомянутого:
являются «трубопроводами». Грамматика устанавливает строительные блоки и строит на них, как это типично для формальных грамматик, подобных этой (и для языков программирования, таких как C), поэтому отдельная «простая команда» считается «конвейером», даже если она не содержит трубка. Это не имеет (семантического) смысла для того, чтобы присвоение переменной было компонентом конвейера, но вещи как
x=1 | od -ab
или
ls -laR | z=0
синтаксически допустимы.
Вещи кактрубопровод 1 && трубопровод 2 || трубопровод 3
называются «списки» bash и «И-ИЛИ списки» POSIX. Опять же, отдельный «конвейер» или даже отдельная «простая команда» считается «списком И-ИЛИ», даже если он не содержит И или ИЛИ.
Когда вы добираетесь до таких вещей, какИ-ИЛИ список 1 И И-ИЛИ список 2 ; И-ИЛИ Список 3
номенклатура начинает становиться немного противоречивой. Баш также называет эти «списки»; POSIX называет их «списки», «составные списки» и (редко) «термины». Опять же, отдельный список «И-ИЛИ», «конвейер» или даже отдельная «простая команда» считается «списком», даже если он не содержит a &
или a ;
.
Вещи как( составной_лист )
а также
{ составной_лист ;}
и команды управления потоком ( for
, if
- then
- else
, while
и т. д.) называются «составными командами».
В приведенных выше примерах, вероятно , имеет самый смысл интерпретировать A
, B
и C
быть трубопроводов. Помните, что «конвейер» может быть отдельной «простой командой»; это не должно содержать трубу.
{
...}
должно работать. Я мог бы попробовать это бессистемно и не получил ожидаемых результатов.