在 gnome 终端内回显 $PATH:
/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
使用以下命令修改了我的文件:
导出PATH = /home/pc/less.js/bin:$PATH
为什么在脚本中作为文件执行时不起作用?问题是找不到 lessc 命令。
答案1
该脚本使用 运行/bin/zsh
,它不是交互式或登录 shell,并且不会加载此文件。来自man zsh
,重点是我的:
命令首先从 /etc/zshenv 读取;这不能被覆盖。后续行为由 RCS 和 GLOBAL_RCS 选项修改;前者影响所有启动文件,而后者仅影响全局启动文件(此处显示的路径以 / 开头的文件)。如果在任何时候取消设置其中一个选项,则不会读取相应类型的任何后续启动文件。$ZDOTDIR 中的文件也可以重新启用 GLOBAL_RCS。默认情况下,RCS 和 GLOBAL_RCS 都已设置。
然后从 $ZDOTDIR/.zshenv 读取命令。 如果 shell 是登录 shell,则从 /etc/zprofile 读取命令,然后从 $ZDOTDIR/.zprofile 读取。然后,如果 shell 是交互式的,则从 /etc/zshrc 读取命令,然后从 $ZDOTDIR/.zshrc 读取命令.最后,如果该shell是登录shell,则读取/etc/zlogin和$ZDOTDIR/.zlogin。
该脚本从其调用处继承环境,并且如果这不是另一个(交互式)shell,它将不包含您在中设置的首选项.zshrc
。
您可以设置PATH
它在全局范围内的应用位置(例如/etc/zshenv
),直接在脚本中明确设置它,或者更改shebang脚本头来运行/bin/zsh -i
,使其加载.zshrc
(引用man zsh
:强制 shell 进行交互。仍然可以指定要执行的脚本。)。
或者,只需指定默认值以外的程序的完整路径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 将获取后续全局启动文件。