Как использовать оператор echo в подключаемом скрипте?

Вопрос или проблема

Мы создали оболочку, чтобы скрипты .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'`

Здесь происходит следующее:

  1. source ~cad/.cadbashrc – данный скрипт загружает переменные окружения или другие настройки из файла .cadbashrc.
  2. compgen -e – эта команда генерирует список всех экспортированных переменных окружения.
  3. 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, чтобы лучше понимать различия в синтаксисе и подходах.

Оцените материал
Добавить комментарий

Капча загружается...