Intereting Posts
Как автоматически создавать файл .desktop? Как отформатировать результаты grep? xrandr, xorg test screen error – по умолчанию используется только допустимый режим SSH запрашивает парольную фразу для открытого ключа без набора фреймов emerge запланировал 2 версии одного и того же пакета (dev-lang / perl-5.20 против perl-5.22) для создания конфликтов Ошибка Proxychains DNS, но не с помощью ping Как печатать строки между шаблоном 1 и 2-м совпадением шаблона2? Как разделить файл размером 6 или 7 ГБ на несколько файлов под-2 ГБ без разделения записи? Где можно установить локальное программное обеспечение, которое работает до / usr? Перечисление «компьютеров, подобных мне» в моей подсети? Почему не удается удалить пользователя в Raspbian? разница между / dir и / dir / Kde Plasma возвращается к экрану входа в систему каждый раз Загрузка в VNCViewer на малине Pi. Форматировать диск через терминал rootfs

Предотвращение или обнаружение действия каталога изменений в сценарии оболочки

У меня есть библиотека, которая принимает плагины. Плагины – это сценарии оболочки. Я хочу, чтобы плагины не изменяли текущий рабочий каталог для любой команды в скрипте.

Одна вещь, которую я мог бы сделать, – это каким-то образом предотвратить изменение каталога, сделав cd или подобное в некотором виде no-op. Это кажется плохой идеей и, возможно, тиранической / слишком тяжелой.

Другая вещь, которую я мог бы сделать, – заставить плагины пройти набор тестов, и в этих тестах каким-то образом обнаруживается смена каталога в скрипте. (И не удалось проверить, была ли выдана команда каталога изменений).

Мой вопрос: есть ли хороший способ предотвратить cd'ing (и подобные команды … что это такое?) Или определить cd в сценарии оболочки?

С подходом plugins-run-in-subshell (хотя у этого есть недостатки, главным образом, вокруг того, должны ли плагины управлять состоянием в родительском), тогда плагин может выдавать любые запросы chdir он хочет, поскольку это не изменит рабочий каталог родителя:

 assumethisistheplugincode() { cd /tmp pwd } cd /var/tmp || exit 1 printf "before " pwd # and this is how we run a "plugin", in a subshell... ( assumethisistheplugincode ) printf "after " pwd 

более простой подход

скопируйте скрипт внутри каталога, где он не может «убежать»,

выполнить скрипт:

chroot /directory /bin/bash ./script.sh