
在 gnome 終端機內 echo $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/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/Programming/Software/tup:/home/pc /Programming/函式庫/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/mpi/gcc/openmpi/bin:/home/pc/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/ bin:/ usr/遊戲:/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– 登入外殼
.z設定檔– 登入外殼
/etc/zshrc– 互動式外殼
.zshrc– 互動式外殼
/etc/zlogin– 登入外殼
.zlogin– 登入外殼
兩個 zsh 選項會影響 zsh 是否取得上述某些檔案的來源。 (“RCS”是“rc”的複數形式,以大寫形式呈現。)
RCS 和 GLOBAL_RCS zsh 選項是預設的。
- RCS – 影響所有啟動文件
- GLOBAL_RCS – 僅影響全域啟動檔案(以「/」開頭的路徑名稱)
如果啟動檔案取消設定這些選項之一,zsh 將跳過該類型的後續啟動檔案。
如果啟動檔案設定了 GLOBAL_RCS 選項,zsh 將取得後續的全域啟動檔案。