
echo $PATH dentro do terminal 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/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:/home/pc/Programação/Software/tup:/home/pc/Programação/ Bibliotecas/depottools:/home/pc/Programming/Libraries/apache-maven-3.0.4/bin
De dentro deste script:
#!/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/jogos:/usr/lib64/jvm/jre/bin
Como você pode ver, modifiquei meu .zshrc
arquivo com isto:
exportar PATH=/home/pc/less.js/bin:$PATH
Por que não funciona no script quando executado como um arquivo? O problema é que o comando lessc não está sendo encontrado.
Responder1
O script é executado usando /bin/zsh
, que não é um shell interativo ou de login e não carrega este arquivo. De man zsh
, ênfase minha:
Os comandos são lidos primeiro em /etc/zshenv; isso não pode ser substituído. O comportamento subsequente é modificado pelas opções RCS e GLOBAL_RCS; o primeiro afeta todos os arquivos de inicialização, enquanto o segundo afeta apenas os arquivos de inicialização globais (aqueles mostrados aqui com um caminho começando com /). Se uma das opções não for definida a qualquer momento, quaisquer arquivos de inicialização subsequentes do tipo correspondente não serão lidos. Também é possível que um arquivo em $ZDOTDIR reative GLOBAL_RCS. Tanto RCS quanto GLOBAL_RCS são definidos por padrão.
Os comandos são então lidos em $ZDOTDIR/.zshenv. Se o shell for um shell de login, os comandos serão lidos em /etc/zprofile e depois em $ZDOTDIR/.zprofile. Então, se o shell for interativo, os comandos serão lidos em /etc/zshrc e depois em $ZDOTDIR/.zshrc. Finalmente, se o shell for um shell de login, /etc/zlogin e $ZDOTDIR/.zlogin serão lidos.
O script herda o ambiente de onde é chamado e, se este não for outro shell (interativo), não conterá as preferências definidas em .zshrc
.
Você pode definir PATH
onde ele se aplica globalmente (por exemplo /etc/zshenv
), defini-lo explicitamente no script diretamente ou alterar o cabeçalho do script shebang para ser executado /bin/zsh -i
, fazendo-o carregar .zshrc
(citando man zsh
:Força o shell a ser interativo. Ainda é possível especificar um script para execução.).
Alternativamente, apenas especifique o caminho completo para o programa que não está no padrão PATH
, por exemplo /home/pc/less.js/bin/lessc
.
Responder2
arquivos de inicialização zsh (também conhecidos como arquivos rc)
Um nome de arquivo abaixo que não seja um caminho completo é implicitamente precedido por “$ZDOTDIR/”, que normalmente é seu diretório inicial.
A ordem em que o zsh origina os arquivos de script de inicialização é a seguinte.
/etc/zshenv– Primeiro, os comandos são lidos daqui; as opções não podem ser substituídas por isso.
.zshenv
/etc/zprofile– shell de login
.zperfil– shell de login
/etc/zshrc– shell interativo
.zshrc– shell interativo
/etc/zlogin– shell de login
.zlogin– shell de login
Duas opções zsh afetam se o zsh origina alguns dos arquivos acima. (“RCS” é o plural de “rc”, traduzido em maiúsculas.)
As opções RCS e GLOBAL_RCS zsh são definidas por padrão.
- RCS – afeta todos os arquivos de inicialização
- GLOBAL_RCS – afeta apenas arquivos de inicialização globais (nomes de caminho começando com “/”)
Se um arquivo de inicialização desativar uma dessas opções, o zsh ignora os arquivos de inicialização subsequentes desse tipo.
Se um arquivo de inicialização definir a opção GLOBAL_RCS, o zsh origina os arquivos de inicialização globais subsequentes.