Если мы определим и используем псевдоним B внутри другого псевдонима A, первое выполнение A завершится ошибкой. Например,
alias A='alias B="which ls"; B;'
Исполнение в первый раз будет выглядеть (в bash)
bash: B: command not found
Приведенный выше пример представляет собой упрощенную конструкцию. на практике такое использование может встречаться неявно.
Причина может заключаться в следующем: когда мы выполняем псевдоним A, все расширения выполняются до выполнения, но B не определен, когда мы выполняем A в первый раз.
Итак, есть ли способ сделать первое выполнение успешным?
Ситуация, с которой я столкнулся, сложнее, чем описанная выше. Мой псевдоним выглядит так (в tcsh)
псевдоним A 'cmd1; cmd2; B -v arg_of_B; cmd3; cmd4;'
где B — псевдоним, определенный cmd2. Кроме того, определение B выглядит так (в tcsh)
псевдоним B 'источник /path/to/script.csh'
Таким образом, использование eval для отсрочки выполнения B может не сработать, потому что eval создаст новую оболочку для выполнения команды. Еще один фактор, усложняющий это, заключается в том, что за псевдонимом следуют аргументы. Я пытался использовать exec, но безуспешно.
bash
компонент? - person chepner   schedule 10.05.2013