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

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

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

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

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

2 Solutions collect form web for “Предотвращение или обнаружение действия каталога изменений в сценарии оболочки”

С подходом 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

  • Повторное использование пользовательского ввода в скрипте
  • В сценарии проверьте, не поступает ли стандартный ввод из файла или канала
  • удалять строки из выходного файла из diff
  • Установить команду, если команда не существует
  • Поиск файлов, более новых, чем другой файл в каждом подкаталоге
  • Какой смысл перенаправлять вывод grep на / dev / null?
  • Использование SSH в сценарии bash для запуска команд на сервере с использованием переменных.
  • Как изменить (не добавлять) числовую переменную?
  • Создание множества файлов со случайным контентом
  • whiptail или диалог
  • Мощный способ выполнения команды / запуска скрипта при входе в систему?
  • Interesting Posts

    Почему echo $ SHELL всегда показывает / bin / bash?

    изящно завершающие процессы с killall <имя_процесса>

    Перекомпилировать ядро ​​для изменения размера стека

    Почему шрифты все ввернуты для удаленных приложений X11 на одном клиенте Mac?

    Вывод команды переключения вправо

    Как новые идентификаторы пользователей автоматически вычисляются по умолчанию в Linux?

    gnu-параллельная многопоточная труба использует мало CPU%, но киоски сервера

    Способ автоматической замены исходного файла на выход?

    modinfo не возвращает информацию о само вставленном модуле

    Не удается загрузить FreeBSD после установки

    Удалить соответствующий файл из каждой подпапки текущего каталога

    mutt: thread, отсортированный по последней активности, но упорядоченные по почте рассылки

    Логротат не работает

    Как просмотреть MAC-адрес вашего компьютера с помощью «ifconfig»?

    Что делает l_i_version в extode inode?

    Linux и Unix - лучшая ОС в мире.