
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/local/bin:/home/pc/local/bin:/usr/lib64/mp i/gcc/openmpi/bin:/home/pc/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib64/jvm/jre/bin:/home/pc/Программирование/Программное обеспечение/tup:/home/pc/Программирование/Библиотеки/depottools:/home/pc/Программирование/Библиотеки/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/mpi/gcc/openmpi/bin:/home/pc/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib64/jvm/jre/bin
Как вы видите, я изменил свой .zshrc
файл следующим образом:
экспортировать ПУТЬ=/home/pc/less.js/bin:$PATH
Почему не работает в скрипте при запуске в виде файла? Проблема в том, что команда lessc не находится.
решение1
Скрипт запускается с помощью /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
.
решение2
Файлы запуска 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 использует последующие глобальные файлы запуска.