2017-07-24 225 views
1

我有一個頂級bash腳本,說ScriptA,和一個子目錄DY中的一些其他bash腳本,它與腳本A處於同一級別。假設其他bash腳本在DY中是ScriptB和ScriptC。 ScriptA將在某個時間點提供ScriptB和ScriptC,並且我希望所有的腳本都能夠在各自的目錄中運行。這裏有一個例子:將工作目錄更改爲當前腳本的目錄

SCRIPTA:

#!/bin/bash 
touch script_a_1.txt 
source DY/ScriptB.sh 
touch script_a_2.txt 
source DY/ScriptC.sh 

ScriptB:

#!/bin/bash 
touch script_b_file.txt 

ScriptC:

#!/bin/bash 
touch script_c_file.txt 

所以script_a_1.txt和script_a_2.txt應在目錄SCRIPTA是in和script_b_file.txt和script_c_file.txt應該在子目錄DY中。

我試圖把

cd "$(dirname "${BASH_SOURCE[0]}")" && pwd 

在ScriptB和ScriptC的頂部和SCRIPTA當它來自ScriptB回來,但回到SCRIPTA時,工作目錄仍處於DY而不是哪裏SCRIPTA是英寸

有關如何完成此任何想法?

EDIT

獎金如果溶液還可以在子進程運行腳本時處理的情況下,即 SCRIPTA:

#!/bin/bash 
touch script_a_1.txt 
source DY/ScriptB.sh 
touch script_a_2.txt 
DY/./ScriptC.sh 

*也固定在初始SCRIPTA示例不採購ScriptC

回答

4

將目錄ScriptB.sh推到目錄堆棧上,然後運行該腳本,並在完成時彈出。

pushd DY 
source ./ScriptB.sh 
popd 

不錯,乾淨。

也適用於子流程:

pushd DY 
./ScriptC.sh 
popd 
+0

除OP之外的所有清潔是而不是像你在這裏展示的那樣在子進程中運行。請修復(+1任一方式)。 –

+0

@MadPhysicist好點,剛剛修復。 – yinnonsanders

+0

工程就像一個魅力。這樣做有什麼警告嗎? – bitscuit

0

那麼你可以做這樣的事情,有點髒,但起點:

在腳本B &Ç只是把:

cd subdirectory && touch ./your_file_name.log && cd .. 

無論如何,我會檢查一個更好的方式來做到這一點