Что вызывает скрипт 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 которая могла бы вызвать это.

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 подтверждает это поведение.

  • TCSH Prompt отображает синтаксическую ошибку в отношении отсутствующего кронштейна
  • создание псевдонима для cmd с backticks
  • Как установить неограниченный размер в файл истории для tcsh?
  • Понимание команды «grep» показывает разные результаты, чем ожидалось
  • Выполнять вывод команды в tcsh
  • Как временно обходить псевдоним в tcsh?
  • Что случилось с этим csh-файлом?
  • установить псевдоним для каталога
  • Для одного и того же пользователя unix или linux разные наборы переменных среды
  • Как заставить tcsh не вставлять пробелы в команду, которая охватывает несколько строк
  • Как достичь переменной косвенности (обратитесь к переменной, имя которой хранится в другой переменной) в tcsh
  • Interesting Posts

    Входная манипуляция для псевдонима

    Различные версии Debian из двух разных команд

    Почему мой запрос bash изменился на «root @ bogon»

    переключаться между встроенной графикой и графикой NVIDIA на лету

    Как я могу определить, откуда происходят неправильные локальные результаты DNS?

    Как установить sshfs на Linux Mint?

    Как разбить массив в наборе из пяти файлов и загрузить их параллельно?

    Жесты с несколькими касаниями в GNOME 3.14

    Как написать файл через ssh

    Полностью стереть / удалить диск с помощью live debian disto

    В Emacs, как мне проверить, что было изменено в буфере (перед сохранением и перезаписью файла)?

    Почтовый ящик, который отображает любой файл mbox или Maildir

    Найдите файл хранилища ключей, содержащий конкретный SHA-1

    Создание большого файла со случайным содержимым: короткое сокращение путем копирования?

    Как установить личность по умолчанию для ядра?

    Linux и Unix - лучшая ОС в мире.