我有一个顶级bash脚本,比如ScriptA,以及子目录中的几个其他bash脚本,DY与Script A处于同一级别。让我们说DY中的其他bash脚本是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所在的目录中,而script_b_file.txt和script_c_file.txt应该在子目录DY中。
我尝试过放置
cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd
当ScriptB和ScriptC从ScriptB返回时,它位于ScriptB和ScriptA的顶部,但是当返回ScriptA时,工作目录仍然在DY中而不是ScriptA所在的位置。
关于如何实现这一目标的任何想法?
修改
如果解决方案在子进程中运行脚本时也可以处理这种情况,那就是奖励,即 SCRIPTA:
#!/bin/bash
touch script_a_1.txt
source DY/ScriptB.sh
touch script_a_2.txt
DY/./ScriptC.sh
*还修复了最初的ScriptA示例,而不是采购ScriptC
答案 0 :(得分:4)
将ScriptB.sh
目录推送到目录堆栈,然后运行脚本,并在完成后弹出。
pushd DY
source ./ScriptB.sh
popd
很干净。
也适用于子流程:
pushd DY
./ScriptC.sh
popd
答案 1 :(得分:0)
嗯,你可以做这样的事,有点肮脏但是一个起点:
在剧本B& C刚刚提出:
cd subdirectory && touch ./your_file_name.log && cd ..
无论如何,我会检查更好的方法来做到这一点