Что вызывает скрипт csh иногда не source /etc/csh.cshrc?
У меня есть сценарий пост-установки csh, который выполняется из сообщения rpm %post
с его линией перевода, установленной в #!/bin/csh
(без опции -f
). Это должно привести к тому, что файл /etc/csh.cshrc
должен быть прочитан перед выполнением остальной части скрипта в соответствии с /etc/csh.cshrc
страницами для bsd-csh (1) и tcsh (1) . У меня есть определенные общесистемные переменные среды и определения псевдонимов в /etc/csh.cshrc
что скрипт зависит от правильной работы. Ожидаемое поведение заключается в том, что, когда csh выполняет сценарий, он сначала берет определения общесистемной системы, а затем запускает сценарий.
Это работает, по крайней мере, на начальном этапе при определенных условиях. Сценарий csh всегда называется таким же образом из раздела %post
rpm %post
. Однако, в зависимости от того, как выполняется приложение rpm install, скрипт может не отображать ожидаемые переменные и ошибку, поэтому мне кажется, что это, вероятно, не поиск /etc/csh.cshrc
. Установка может быть выполнена в корневой оболочке входа, через sudo, поверх ssh, из cron или инициирована каким-либо другим процессом. По крайней мере, один из них вносит определенную разницу, которая предотвращает /etc/csh.cshrc
источника /etc/csh.cshrc
. Я не вижу ничего на страницах man, кроме опции -f
которая могла бы вызвать это.
- sed для замены совпадающего слова на конец строки
- название динамического окна из ввода команды (TCSH)
- Все подпроцессы - Bash (!),
- Необходимо установить переменную с ""
- tcsh: сбой символа i-search-back
- удалите первую строку файла, только если пустой с помощью sed
- Несогласованность перенаправления stderr между tcsh и другими оболочками
- Что случилось с этим csh-файлом?
- sed заменить на backspace
- TCSH Prompt отображает синтаксическую ошибку в отношении отсутствующего кронштейна
- tcsh, чтобы переместить курсор обратно в предыдущее пространство
- Заменить определенный текст в фигурных скобках
- Сравнение переменной с буквами верхнего и нижнего регистра
One Solution collect form web for “Что вызывает скрипт csh иногда не source /etc/csh.cshrc?”
Оказывается, разница состоит в отсутствии переменной среды $HOME
. Когда $HOME
не определяется в среде, никакие файлы запуска вообще не получены csh или tcsh. Отсутствие переменной $HOME
интерпретируется csh точно так же, как если бы ему была задана опция -f
командной строки.
Это имеет смысл при рассмотрении файлов запуска оболочки ~/.cshrc
и ~/.login
в домашнем каталоге пользователя. Если $HOME
не определен, то эти файлы, зависящие от пользователя, не могут быть загружены. Но csh просто пропускает поиск всех файлов запуска, как общесистемных, так и пользовательских, когда $HOME
не определен.
Определение $HOME
в любой действительный каталог перед выполнением скрипта csh, будь то реальный домашний каталог пользователя или даже пустой временный каталог, делает источник csh /etc/csh.cshrc
как ожидалось.
Я не нашел никакой документации для объяснения или описания этой функции, но исходный код для bsd-csh и tcsh подтверждает это поведение.
- ksh, выполнить действие при достижении максимального значения цикла
- Shellscript! Синтаксическая ошибка, неожиданно "("