Я создал небольшую мини-оболочку, и пусть пользователь вводит команду типа «ls», и она отобразит содержимое каталога, как это предполагается, используя execv() в моем коде, но это похоже, не работает, когда пользователь вводит что-то вроде set set = bob. Я искал повсюду, что я должен использовать в своем коде для выполнения команды set, когда пользователь вводит ее, и лучшее, что я могу найти, это system(), но это все еще не работает для меня. Есть идеи?Выполнение команды SET в c-программе
ответ
Поскольку вы выполняете fork-and-exec или систему(), команда запускается в отдельном процессе. Что происходит в этом процессе (например, установка переменной окружения) не влияет на среду родителя. (Отдельный вопрос в том, что set
не создает переменную окружения. Вы должны были бы export
в [ба] ш или setenv
[т] CSH, чтобы сделать это.)
Так что вам нужно закодировать ваш мини- shell для обработки команды set
явно, а не передачи ее другой программе.
set
- это командная оболочка, а не внешняя команда (в действительности это должен быть предполагаемый эффект, который заключается в изменении переменной оболочки в самом процессе оболочки).
Это означает, что вам нужно искать и обрабатывать set
в самой оболочке, добавив именованную переменную в некоторую внутреннюю структуру данных, которая отслеживает переменные оболочки (или обновляет ее, если она уже существует).
Значит ли это, что мне придется написать свою собственную команду set в моей мини-скорлупе, которая сделает что-то похожее на встроенную команду set? – user1186710
@ user1186710: Правильно - если вы хотите поддерживать 'set', то есть. – caf
Отличное спасибо! – user1186710
Возможно, вы захотите посмотреть на setenv (3) и getenv (3). Это функции для изменения и чтения переменных среды из программы C.
Но это не позволит мне создавать переменные? – user1186710
На странице man: «Функция setenv() добавляет переменную _name в среду со значением _value« Итак, да, да. – user732933
- 1. Выполнение команды SET в Perl
- 2. Выполнение команды из другой команды
- 3. Выполнение команды
- 4. Выполнение команды в Node.js
- 5. Выполнение команды в Java
- 6. Выполнение команды в C#
- 7. выполнение команды в MIPS
- 8. Выполнение команды в ubuntu
- 9. Выполнение команды в тюрьме
- 10. Выполнение команды REDIS в Node.js
- 11. Выполнение команды UPDATE
- 12. Подстроки расширения команды SET
- 13. отрицание команды Set unused
- 14. Как отложить выполнение команды?
- 15. Выполнение команды, хранящейся в переменной
- 16. Выполнение команды консоли в PHP
- 17. Выполнение команды ls в C
- 18. Выполнение динамической команды в PowerShell
- 19. Выполнение команды echo в php
- 20. Выполнение команды julia.exe в Java
- 21. Выполнение команды «du» в python
- 22. Выполнение команды, выполняющейся в unix
- 23. Выполнение команды в скрипте Kornshell
- 24. Выполнение команды sqlplus в perl
- 25. Выполнение команды powershell в eclipse
- 26. Выполнение сложной команды в Makefile
- 27. Выполнение команды DOS в WIX
- 28. Выполнение системной команды в Vala
- 29. Выполнение команды cURL в R
- 30. Выполнение Curl команды в JSP
Это похоже на один из моих первых проектов в школе. A WHOLE LOT ... – Eregrith
Что вы думаете? – user1186710