[英]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.