Замена шаблона строкой

exec 3>&1

fd 3 теперь является dup fd 1 (в вашем примере, ваш терминал). Как сказано на странице руководства, это означает, что fd 1 и fd 3 могут использоваться как взаимозаменяемые для обозначения одного и того же файла или устройства.

Основное использование дублирования в shell - это сохранение копии fd, чтобы ее можно было восстановить позже.

my_string=$(returnString "$*")

Для того чтобы bash получил вывод stdout после оценки returnString "$*", он создает pipe и развилку, а дочерняя программа вызывает dup2, чтобы переместить записывающий конец трубы (в этом примере это fd 5, но это может варьироваться) на fd 1.

exec 4>&1 >&3

Перенаправления оцениваются слева направо. fd 4 устанавливается как дубликат конца трубы. Затем, fd 1 устанавливается как дубликат fd, который ссылается на ваш терминал.

echo "writing to stdout"

echoes на fd 1, ваш терминал.

exec >&4-

Это перемещает (то есть, делает dup2) fd 4 на fd 1. fd 1 теперь является концом трубы.

echo "$s"

эхо на конец трубы. В конце концов, это считывается родительской оболочкой с другого конца трубы и используется как результат $(returnString "$*")

4
19.10.2016, 15:27
0 ответов

Теги

Похожие вопросы