Делает вид, что у меня есть программа, которая нуждается в окружении. Давайте просто притворимся, что он Perl, и я хочу изменить среду (для поиска в библиотеках специального места). Каждый раз, когда я воюю со стандартным способом делать что-то в UNIX, я плачу тяжелую цену, и я плачу за гибкость. Я знаю, что, используя простой скрипт оболочки, я добавлю дополнительный процесс в дерево процессов. Любой процесс, получающий доступ к его собственному дереву процессов, может быть выброшен за небольшой цикл. Все, что рекурсивно к нетривиальному пути, должно было бы защищаться от множественных расширений среды. Все, что похоже на то, что находится в трубе программ (или закрытие и открытие STDIN, STDOUT или STDERR), является моей самой большой проблемой. Что я делаю с собой?Ловушки использования сценариев оболочки для обертывания программы?
ответ
Что я буду делать с собой?
Как вы себя чувствуете?
Обертка программы в скрипте оболочки для настройки среды на самом деле довольно стандартная, и риск довольно минимален, если вы не пытаетесь что-то сделать действительно странный.
Если вы действительно обеспокоены тем, что еще один процесс - и процессы UNIX очень дешевы, по дизайну - используйте ключевое слово exec
, которое вместо разветвления нового процесса просто выполняет новый исполняемый файл exec вместо текущий. Итак, где вы, возможно, имели
#!/bin/bash -
FOO=hello
PATH=/my/special/path:${PATH}
perl myprog.pl
Вы бы просто сказать
#!/bin/bash -
FOO=hello
PATH=/my/special/path:${PATH}
exec perl myprog.pl
и запасной процесс уходит.
Этот трюк, однако, почти никогда не стоит беспокоить; один контрпример, что если вы не можете изменить оболочку по умолчанию, это полезно сказать
$ exec zsh
вместо просто запустить оболочку, потому что тогда вы получите ожидаемое поведение для управления технологических процессов и так далее.
- 1. Компиляторы для сценариев оболочки
- 2. Шаблон для обертывания команд оболочки в классе
- 3. Контроль версий для сценариев оболочки
- 4. Zip-функция для сценариев оболочки
- 5. петли внутри оболочки оболочки сценариев
- 6. Модульное тестирование сценариев оболочки
- 7. Выполнение сценариев оболочки из Java-программы ssh на удаленный сервер
- 8. Предоставление неинтерактивных программных входов для сценариев оболочки
- 9. Файл чтения сценариев оболочки Bourne
- 10. Ошибка регистрации сценариев оболочки
- 11. Переименовать вывод сценариев оболочки
- 12. Ограничение использования ОЗУ для программы, выполняемой с помощью сценария оболочки
- 13. оболочки сценариев - существование файла
- 14. - Синхронизация сценариев оболочки?
- 15. Awk сценариев оболочки
- 16. Расчет сценариев оболочки -
- 17. auto_ptr Ловушки и ловушки
- 18. Как использовать Ruby для сценариев оболочки?
- 19. Шаблоны проектирования или рекомендации для сценариев оболочки
- 20. сценарий оболочки, выполняющий несколько сценариев оболочки для cron
- 21. простая конкатенация строк в python для оболочки сценариев оболочки
- 22. Создание среды сценариев для программы C#
- 23. Написание программы-оболочки в Java для adb
- 24. строки с использованием сценариев оболочки
- 25. Crontab тест сценариев оболочки PHP
- 26. Ошибка с помощью сценариев оболочки
- 27. Запуск сценариев оболочки через java
- 28. Ловушки использования транзакций SQL против транзакций .NET
- 29. Угловые JS: какие проблемы/ловушки использования Angular?
- 30. Ловушки настройки Backbone Collection.models против использования Collection.reset
Я думаю, что согласен с этим. Я очень переживаю. – ojblass