shell指令碼直接執行和crontab結果不一樣

2021-06-29 09:22:18 字數 1972 閱讀 8517

解決方法.

1.原有的crontab中設定為(注:相關名字有改變,不影響說明)

* * * * * /usr/home/pro/check/test.sh  >> /usr/home/pro/check/log/test.`date +\%y\%m\%d`.log

改後為* * * * * cd /usr/home/pro/check/ && bash test.sh  >> /usr/home/pro/check/log/test.`date +\%y\%m\%d`.log

2.設定程式執行的環境變數

原有的程式開頭加入

source setpath.sh

setpath.sh的**為

#!/bin/bash

path=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/home/x/bin ①

export $path

①中是怎麼出來的?echo $path的結果

嗯,按照上面的方法就解決了。

如果上面或下面有啥錯誤,請指正。

總結了下,主要涉及以下幾個方面.

1.shell環境變數的問題

2.為何要設定path環境變數

2.子shell的問題

注:以下摘自《什麼是shell環境變數?

shell作為核心的乙個外殼,通過它我們可以直接把命令列(command line)遞交給核心,當然核心也會處理後返回

.shell有乙個父程序,我們執行的任何shell程式,都是由產生的乙個sub-shell即子shell的。

所謂環境變數其實就是那些會傳給子程序的變數。

首先,我們所執行的任何程式,都是由父行程(parent process)所產生出來的乙個子行程(child

process),

子行程在結束後,將返回到父行程去

再結合以上兩個概念(process + script),那應該就不難理解如下這句話的意思了:

* 正常來說,當我們執行乙個 shell script 時,其實是先產生乙個 sub-shell 的子行程,然

後 sub-shell 再去產生命令列的子行程。

然則,那讓我們回到本章開始時所提到的例子再從新思

所謂環境變數其實就是那些會傳給子行程的變數。

簡單而言,"遺傳性"就是區分本地變數與環境變數的決定性指標。

然而,從遺傳的角度來看,我們也不難發現環境變數的另乙個重要特徵:

* 環境變數只能從父行程到子行程單向繼承。換句話說:在子行程中的環境如何變更,均不會

影響父行程的環境。

每次當我們完成系統登入(log in),我們就取得乙個互動模式的 shell ,也稱為 login shell

或 primary shell。

若從行程(process)角度來說,我們在 shell 所下達的命令,均是 shell 所產生的子行程。

這現像,我們暫可稱之為 fork 。

如果是執行指令碼(shell script)的話,指令碼中的命令則是由另外乙個非互動模式的子 shell

(sub shell)來執行的。

也就是 primary shell 產生 sub shell 的行程,sub shell 再產生 script 中所有命令的

行程。環境變數用於所有使用者程序(經常稱為子程序)。登入程序稱為父程序。shell中執行的用

戶程序均稱為子程序。不像本地變數(只用於現在的shell)環境變數可用於所有子程序,這

包括編輯器、指令碼和應用。

環境變數可以在命令列中設定,但使用者登出時這些值將丟失,因此最好在.profile檔案中

定義。系統管理員可能在/etc/profile檔案中已經設定了一些環境變數。將之放入profile檔案意

味著每次登入時這些值都將被初始化。

傳統上,所有環境變數均為大寫。環境變數應用於使用者程序前,必須用expert命令匯出。

環境變數與本地變數設定方式相同。

Ubuntu上直接執行Python指令碼

將寫好的python 最上面新增一行內容 usr bin python3給這個檔案賦予許可權 chmod x file.py 這樣的話,每次必須切換到該檔案目錄下才可執行,為了方便程式的使用,則需要將檔案連線到 usr bin或者 usr local bin等等配置了系統環境變數的目錄下 例如 su...

shell中的source和直接執行sh的區別

首先我們知道我們執行shell有這麼幾種方法 1.sh bash使用其內建的命令集來執行一些命令,例如如下 sh demo.sh bash demo.sh 2.使用.或者 shellpath sh的方式執行 demo.sh home vagrant shell test.sh 採用上面的方法的話需要...

解析php中如何直接執行SHELL

message shell exec sudo usr local webserver nginx sbin nginx t 2 1 echo 執行結果 message.上面的語句可以直接www.cppcns.com在php中執行shell語句 如果有返回值 那麼其中的 2 程式設計客棧gt 1 是...