Я создал настраиваемую оболочку на C++. В настоящее время оболочка проектируется как бесконечный цикл while, который запускается путем запуска соответствующего исполняемого файла с терминала (я использую Ubuntu в качестве моей ОС). Оболочка реализует несколько новых команд, каждая из которых хранится в виде отдельных исполняемых файлов в файловой системе. Остальные команды, которые вводит пользователь, выполняются непосредственно с помощью функции обертки execve()
.Создание настраиваемой оболочки
Таким образом, я выполняю все пользовательские команды с помощью функции execve(): настраиваемые команды хранятся как отдельные exectuables и являются «exec
ed», предоставляя путь к исполняемому файлу, тогда как любой другой «стандартный» Команда unix напрямую exec
ed.
Вместо того, чтобы запустить его как отдельный исполняемый файл из bash
, я хочу заставить пользователя использовать мою оболочку что выполняется на терминале. Как я могу это сделать?
я сослался на следующие ссылки:
Processes and Sessions and Controlling Terminals
Однако, я не могу понять, чтобы из звеньев, как ассоциации между управляющим терминалом и оболочкой и т.д. Любая помощь быть оцененным в этом отношении.
UPDATE:
Это может показаться немного нелогичным, но:
Есть ли способ осуществить это в качестве команды пользователя, пользователь может выполнить из текущей оболочки Я знаю, что есть команда chsh ... но будет ли она работать с моей оболочкой?
Вам нужен какой-то процесс, который развивает вашу оболочку. Неважно, какой процесс? Будь то bash, любая другая оболочка или какой-нибудь шаг загрузки? Просто зарегистрируйте свою оболочку в качестве оболочки входа в систему, возможно, именно это вы ищите. – arkascha
Когда вы говорите «отдельный терминал», вы имеете в виду отдельный «gnome-terminal» или хотите, чтобы все терминалы были вашей оболочкой? – merlin2011
@arkascha: Это звучит неплохо, но я на самом деле забыл упомянуть о чем-то, и поэтому сделал обновление ... Можете ли вы в этом разобраться? –