4

echo $ PATH внутри терминала gnome:

/home/pc/less.js/bin:/home/pc/local/bin:/home/pc/local/bin:/home/pc/.rvm/gems/ruby-1.9.2-head/bin:/home/pc/.rvm/gems/ruby-1.9.2-head@global/bin:/home/pc/.rvm/rubies/ruby-1.9.2-head/bin:/home/pc/.rvm/bin:/ USR / местные / бен:/ Главная / рс / местные / бен:/ USR / lib64 / МПИ / ССАГПЗ / OpenMPI / бен:/ Главная / рс / бен:/ USR / местные / бен:/ USR / бен:/ бен:/ USR / bin / X11:/ USR / X11R6 / бен:/ USR / игры:/ USR / lib64 / JVM / JRE / бен:/ Главная / рс / Программирование / Программное обеспечение / туп:/ Главная / рс / Программирование / Библиотеки / depottools:/home/pc/Programming/Libraries/apache-maven-3.0.4/bin

Из этого скрипта:

#!/bin/zsh
echo $PATH
while inotifywait -e modify /home/pc/vbox-shared/less; do
    lessc custom.less > /home/pc/vbox-shared/less/custom.css
done

/ USR / lib64 / МПИ / ССАГПЗ / OpenMPI / бен:/ Главная / рс / бен:/ USR / местные / бен:/ USR / бен:/ бен:/ USR / bin / X11:/ USR / X11R6 / бен:/ USR / игры:/ USR / lib64 / JVM / JRE / бен

Как видите, я изменил свой файл .zshrc следующим образом:

экспорт PATH =/home/pc/less.js/bin:$ PATH

Почему это не работает в сценарии при выполнении в виде файла? Проблема в том, что команда lessc не найдена.

2 ответа2

5

Сценарий запускается с использованием /bin/zsh , который не является интерактивной оболочкой или оболочкой входа в систему и не загружает этот файл. От man zsh , акцент мой:

Команды сначала читаются из /etc /zshenv; это не может быть отменено. Последующее поведение изменяется параметрами RCS и GLOBAL_RCS; первый влияет на все файлы запуска, а второй - только на глобальные файлы запуска (показанные здесь с путем, начинающимся с /). Если один из параметров не установлен в какой-либо точке, любые последующие файлы запуска соответствующего типа не будут прочитаны. Для файла в $ ZDOTDIR также возможно повторно включить GLOBAL_RCS. И RCS, и GLOBAL_RCS установлены по умолчанию.

Затем команды читаются из $ ZDOTDIR /.zshenv. Если оболочка является оболочкой входа в систему, команды читаются из /etc /zprofile, а затем $ ZDOTDIR /.zprofile. Затем, если оболочка является интерактивной, команды читаются из /etc /zshrc и затем $ ZDOTDIR /.zshrc. Наконец, если оболочка является оболочкой входа в систему, читаются файлы /etc /zlogin и $ ZDOTDIR /.zlogin.

Сценарий наследует среду, из которой он вызывается, и если это не другая (интерактивная) оболочка, он не будет содержать настройки, заданные вами в .zshrc .

Вы можете установить PATH там, где он применяется глобально (например, /etc/zshenv), установить его прямо в сценарии напрямую или изменить вместо него заголовок сценария shebang на /bin/zsh -i , заставив его загрузить .zshrc (цитируя man zsh: Заставить оболочку быть интерактивной.Еще можно указать скрипт для выполнения.).

В качестве альтернативы просто укажите полный путь к программе, которая не указана в PATH по умолчанию, например, /home/pc/less.js/bin/lessc .

1

Файлы запуска zsh (также известные как rc-файлы)

Имя файла ниже, которое не является полным путем, неявно предшествует «$ ZDOTDIR/», который обычно является вашим домашним каталогом.

Порядок, в котором zsh создает файлы сценариев запуска, выглядит следующим образом.

/etc/zshenv - сначала команды читаются отсюда; параметры нельзя переопределить.

.zshenv

/etc/zprofile - оболочка для входа

.zprofile - оболочка для входа

/etc/zshrc - интерактивная оболочка

.zshrc - интерактивная оболочка

/etc/zlogin - оболочка для входа

.zlogin - оболочка для входа

Два параметра zsh влияют на то, использует ли zsh некоторые из указанных выше файлов. («RCS» - это множественное число от «rc» в верхнем регистре.)

Параметры RCS и GLOBAL_RCS zsh устанавливаются по умолчанию.

  • RCS - влияет на все файлы запуска
  • GLOBAL_RCS - влияет только на глобальные файлы запуска (пути, начинающиеся с «/»)

Если файл запуска не устанавливает один из этих параметров, zsh пропускает последующие файлы запуска этого типа.

Если файл запуска устанавливает опцию GLOBAL_RCS, zsh получает исходные глобальные файлы запуска.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .