shell指令碼中呼叫其他指令碼

2021-09-08 21:53:55 字數 1250 閱讀 7428

目前來說有三種方法:

1. 指令碼絕對路徑

這個方式是最普通的,底層呼叫的是fork實現,執行的時候開乙個子shell執行呼叫的指令碼,子shell執行的時候,父shell還在

子shell執行完畢後返回父shell,子shell從父shell繼承環境變數,但是子shell中的環境變數不會帶回父shell中

2. 句號 + 指令碼絕對路徑

底層呼叫的是source實現的,他於fork的區別是不新開乙個子shell來執行被呼叫的指令碼,而是在同乙個shell中執行,所以被呼叫指令碼中申明的變數和環境變數,都可以在主指令碼中得到和使用

2. exec + 指令碼絕對路徑

exec與fork不同,不需要新開乙個子shell來執行被呼叫的指令碼,而是在同乙個shell中執行,但是使用exec呼叫乙個新指令碼以後,父指令碼exec以後的內容就不會再執行了

下面是乙個指令碼的例子:

父指令碼(1.sh):

#!/bin/bash

a=becho

"pid for 1.sh before exec/source/fork:$$

"export a

echo

"1.sh: \$a is $a

"case $1

inexec)

echo

"using exec…

"exec ./2.sh

;; source)

echo

"using source…

". ./2.sh

;; *)

echo

"using fork by default…

"./2.sh

;;esac

echo

"pid for 1.sh after exec/source/fork:$$

"echo

"1.sh: \$a is $a

"

子指令碼(2.sh):

#!/bin/bash

echo

"pid for 2.sh: $$

"echo

"2.sh get \$a=$a from 1.sh

"a=c

export a

echo

"2.sh: \$a is $a

"

分別呼叫:

1.sh

1.sh exce

1.sh source

可以觀察輸出是否滿足上述規律

shell指令碼呼叫其他指令碼時敏感資訊的處理

我們通常使用python arg1 arg2這種形式傳參,這種形式在傳遞非敏感性息的時候沒有問題,但是在傳遞敏感性息時就有乙個致命的問題 可以通過ps命令列印後台資訊,進而獲取敏感性息。那,這個問題怎麼解決?答案是通過管道符!例如 echo 123 python 然後在python指令碼中通過sys...

呼叫其他python指令碼(指令碼目錄獲取)

目錄 1.問題描述 2.解決方法 2.1 獲取呼叫的指令碼路徑 2.2執行python指令碼 3.總結 python版本 python3.7 os平台 windows7 python 指令碼執行的時候去呼叫執行其他指令碼,使用getcwd 獲取指令碼路徑不對。指令碼timerexec.py 呼叫指令...

Python 呼叫shell指令碼

python呼叫shell指令碼,有兩種方法 os.system cmd 或os.popen cmd 前者返回值是指令碼的退出狀態碼,後者的返回值是指令碼執行過程中的輸出內容。實際使用時視需求情況而選擇。現假定有乙個shell指令碼test.sh bin bash 1.echo hello worl...