簡體   English   中英

從另一個bash腳本運行的bash腳本運行python

[英]Run python from bash script that is run by another bash script

我目前有一個文件夾結構,其中將包含一些需要從某個文件夾中觸發的python腳本,但是我想編寫一個全局腳本,該腳本通過每個文件夾中的單獨腳本來運行每個python腳本。

-獲取者
-女主角
-亞瑟
----start.sh
--Initialise.sh

-Persona
-亞瑟
--- lib
---- pybot
-----pybot.py

當我運行初始化程序時,我的目標是使初始化程序運行“ start.sh”。Arthur是自動程序,並且會有更多名稱不同的文件夾,並使用find並啟動每個start.sh進行初始化。

在initialize.sh中,我有:

#!/bin/bash
. ./Persona/Arthur/start.sh

在start.sh中,我有:

#!/bin/bash
python ../../../Persona/Arthur/lib/pybot/pybot.py

我收到此錯誤:

python: can't open file '../../../Persona/Arthur/lib/pybot/pybot.py': [Errno 2] No such file or directory

但是,如果我從其目錄運行start.sh本身,它將運行良好。 這是因為我假設它是從正確的shell運行的,因此也從目錄運行它。 有沒有辦法讓主腳本在自己的外殼中像自己在運行一樣運行start.sh? 之所以這樣,是因為pybot.py將一堆文件保存到啟動腳本所在的位置,並且因為有多個機器人,所以我需要將它們保存在每個單獨的文件夾中。

首先,當您要調用它時不要來源

#!/bin/bash
. ./Persona/Arthur/start.sh

不要這樣

您的腳本有很多問題。 由於您當前的工作目錄不確定,因此無法使用。 您最好讓您的腳本派生路徑,以使自己擺脫Abs路徑或相對路徑的困擾。

通用代碼可以是

script_dir=`dirname "${BASH_SOURCE[0]}"`

然后您可以使用它來導出目標文件的路徑,

#!/bin/bash
script_dir=`dirname "${BASH_SOURCE[0]}"`
"$script_dir/Persona/Arthur/start.sh"

您的python調用變為:

#!/bin/bash
script_dir=`dirname "${BASH_SOURCE[0]}"`
python "$script_dir/../../../Persona/Arthur/lib/pybot/pybot.py"

這應該可以正常工作。

關於BASH_SOURCE ,請查看https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html


如果要將start.sh的目錄設置為cwd,則應調用cd

#!/bin/bash
script_dir=`dirname "${BASH_SOURCE[0]}"`
cd "$script_dir"
python "$script_dir/../../../Persona/Arthur/lib/pybot/pybot.py"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM