Следующий синтаксис `<( CMD )` выполнит `CMD`, поместит вывод во временный файл и заменит `<()` именем этого файла. Это полезно, когда команды ожидают, что значения будут переданы через файл, а не `STDIN`. Например, `diff <(ls foo) <(ls bar)` покажет различия между файлами в каталогах foo и bar.
### 1.
Кроме результатов в `STDOUT` и ошибок в `STDERR`cценарии возвращают код возврата. Код возврата или статус выхода — это то, как скрипты/команды должны сообщать о том, как прошло выполнение. Значение `0` обычно означает, что все прошло нормально; все, что отличается от `0`, означает, что произошла ошибка.
Кроме результатов в `STDOUT` и ошибок в `STDERR`сценарии возвращают код возврата. Код возврата или статус выхода — это то, как скрипты/команды должны сообщать о том, как прошло выполнение. Значение `0` обычно означает, что все прошло нормально; все, что отличается от `0`, означает, что произошла ошибка.
Коды выхода можно использовать для условного выполнения команд с использованием операторов `&&` (`и`) и `||` (`или`). Команды также можно разделять в пределах одной строки с помощью точки с запятой `;`, если они должны выполниться независимо от возвращаемого кода. Истинная программа всегда будет иметь код возврата `0`, а ложная команда всегда будет иметь код возврата от `1` до `255`.
@ -87,12 +87,14 @@ echo_arguments () {
```
По умолчанию переменная глобальна для скрипта, даже если определена внутри функции. Чтобы сделать переменную локальной, используйте синтаксис `local variable` внутри функции.
Напишите аналогичный предыдущему заданию скрипт, но оберните все действия в функцию, а в конце скрипта выполните эту функцию. Проверьте работу скрипта. Работает ли функция за пределами контекста скрипта?
Напишите аналогичный предыдущему заданию скрипт, но оберните все действия в функцию, а в конце скрипта выполните эту функцию. Проверьте работу скрипта. Доступна ли функция за пределами контекста скрипта?
Заведите внутри функции глобальную `a` и локальную переменную `local b`. Вызовите функцию в скрипте. Выведите обе переменные на экран внутри функции после присвоения значений переменным и после вызова функции.
### 5.
Функции выполняются в текущей среде оболочке, тогда как скрипты выполняются в своем собственном процессе.
Проверьте, что функции могут изменять переменные среды, например, изменить текущий каталог, тогда как скрипт не может. Напишите скрипт, в котором инициализируются две переменные `A` и `B`. Перед одной из них указывается `export`. Выполните скрипт и посмотрите на выдачу команды `env`. Выполните файл командой `source` (документация в `source --help` и секции встроенных комманд `man bash`). Какие переменные экспортировались в оболочку?
Проверьте, что функции могут изменять переменные среды, например, изменить текущий каталог, тогда как скрипт не может. Напишите скрипт, в котором инициализируются две переменные `A` и `B`. Перед одной из них указывается `export`. Выполните скрипт и посмотрите на выдачу команды `env`. Выполните файл командой `source` (документация в `source --help` и секции встроенных команд `man bash`). Какие переменные экспортировались в оболочку?
### 6.
Попробуйте условные выражения в скрипте в `if` конструкции:
@ -181,12 +183,14 @@ echo survived
```
#### 9.4. Почему эти два сценария не идентичны?
```bash
#!/usr/bin/env bash
set -e
f() { test -d nosuchdir && echo no dir; }
f
echo survived
```
```bash
#!/usr/bin/env bash
set -e
f() { if test -d nosuchdir; then echo no dir; fi; }
f
@ -194,6 +198,7 @@ echo survived
```
#### 9.5. При каких условиях это приведет к отказу?
Исправьте проблемы настройки сети в виртуальных машинах `troublesome-X-task[1-5]`. В каждой машине 1 проблема после исправления которой работает команда `ping yandex.com`. Шлюз по умолчанию для машины в каждом задании - 192.168.1.1 в сети 192.168.1.0/24.
#### studX-troublesome-1 - studX-troublesome-5
Исправьте проблемы настройки сети в виртуальных машинах. Команда `ping ya.ru` должна работать.
В 6ом задании `troublesome-X-task6` вам требуется отладить команду `ssh localhost -l mike`, запущенную от пользователя stud. Команда должна отработать без ввода пароля.
#### studX-troublesome-6
Выполните на машине studX-net1 следующие команды
```
ssh-keygen
ssh-copy-id stud@192.168.0.106
```
Почему даже после добавления публичного ключа на `studX-troublesome-6` авторизация по публичному ключу не работает? Найдите и исправьте проблему на `studX-troublesome-6`.
#### studX-troublesome-7
После логина стрелки не работают и выводят странные символы. Исправьте проблему.
#### studX-troublesome-8
Залогиньтесь сначала в `stud` потом в `root`. Посмотрите логи командой `journalctl -o short-iso`. В чём заключается проблема настройки машины? Исправьте её.