Вопрос или проблема
Мы создали оболочку, чтобы скрипты .cshrc
и .bashrc
могли быть общими:
eval `bash -c 'source ~cad/.cadbashrc || exit; for i in $( compgen -e ); do echo setenv $i \"${\\!i}\"\; ; done'`
Однако любой команду echo
в .cadbashrc
больше не работает как echo
.
Как мне добавить комментированные строки в этот файл?
Ответ или решение
Вопрос о том, как использовать оператор echo в скрипте, который подгружается с помощью eval
и bash
, требует внимательного подхода к пониманию, как именно работает данный механизм.
Контекст использования
Вы создали обертку, позволяющую использовать скрипты .cshrc
и .bashrc
совместно. Ваша конструкция использует следующую команду:
eval `bash -c 'source ~cad/.cadbashrc || exit; for i in $( compgen -e ); do echo setenv $i "${\\!i}"; done'`
Здесь происходит следующее:
- source ~cad/.cadbashrc – данный скрипт загружает переменные окружения или другие настройки из файла
.cadbashrc
. - compgen -e – эта команда генерирует список всех экспортированных переменных окружения.
- echo setenv $i "${\!i}" – выводит команды для установки переменных окружения для оболочек, но сама команда echo в данном контексте выполняется под оболочкой bash и передается в eval, где может вызвать сложности.
Проблема с echo
Как видно из вашего описания, команды echo в файле .cadbashrc
больше не работают так, как должны. Это происходит потому, что eval
выполняет результат выполнения echo
, превращая его в команды, а не выводит текст в стандартный вывод, как ожидается.
Решение: Как использовать echo в .cadbashrc
Если вы хотите, чтобы команды echo в .cadbashrc
отображали текст, а не генерировали команды для дальнейшего выполнения, вам необходимо изменить подход к написанию этих команд. Вместо того чтобы использовать echo в контексте eval
, вы можете напрямую записывать комментарии или использовать echo, чтобы выводить нужную информацию, не вмешиваясь в исполнение других команд.
Вот пример, как можно добавить комментарии или вывод в вашем .cadbashrc
:
Пример кода
# Это комментарий, который будет игнорироваться
echo "Загрузка конфигурации... Способы использования:"
# Ваши настройки здесь
setenv MY_VARIABLE "значение"
echo "MY_VARIABLE установлена в $MY_VARIABLE"
Заключение
При использовании скриптов, загружаемых через eval
, важно помнить о контексте, в котором команда выполняется. Чтобы команды echo работали корректно и показывали нужную информацию, следует избегать их использования через конструкции, которые могут изменять контекст выполнения, как в вашем случае с eval и bash. Вместо этого вы можете добавлять комментарии и сообщения вывода непосредственно в ваш .cadbashrc
без необходимости обрабатывать их через eval.
Если у вас возникли дополнительные вопросы или нужны дальнейшие разъяснения по этому вопросу, рекомендую обратиться к документации по особенностям работы с оболочками Bash и Csh, чтобы лучше понимать различия в синтаксисе и подходах.