Разбор создания и запуска исполняемого скрипта

Команды переходят в домашний каталог, создают foo и файл bar, дописывают в bar команду ls foo, делают его исполняемым и запускают. Повторное выполнение дописывает строку, а не заменяет файл.

Короткий ответ

Что ответить на собеседовании

Команды переходят в домашний каталог, создают foo и файл bar, дописывают в bar команду ls foo, делают его исполняемым и запускают. Повторное выполнение дописывает строку, а не заменяет файл.

Подробный разбор

Ответ с пояснениями

Условие

Разберите последовательность операций, которые происходят при выполнении представленного ниже скрипта, и опишите, как они меняют состояние файловой системы.

bash
# !/bin/bash
# рассуждение вслух более ценно чем верный ответ

cd ~
mkdir foo
touch bar && echo "ls foo" >> bar
chmod +x bar
./bar

Ответ

Команды переходят в домашний каталог, создают foo и файл bar, дописывают в bar команду ls foo, делают его исполняемым и запускают. Повторное выполнение дописывает строку, а не заменяет файл.

В типичном Bash без set -e неудачный mkdir при уже существующем foo не остановит последующие команды. touch создаёт отсутствующий bar или меняет его timestamps; && разрешает echo только при успехе touch. >> дописывает команду в конец, chmod +x добавляет право исполнения.

Строка # !/bin/bash — комментарий, а не корректный shebang #!/bin/bash. Если bar — обычный текст без shebang, запускающий Bash после отказа ядра обычно интерпретирует его сам. Для нового пустого foo ls ничего не напечатает. Отдельная первая команда bash запускает вложенную оболочку: для интерактивного ввода и для файла это нужно учитывать. Существующие foo/bar могут изменить результат, поэтому запускать пример в реальном домашнем каталоге для проверки не стоит.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее