从另一个bash脚本运行的bash脚本运行python

2024-05-10 21:18:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有一个文件夹结构,将包含一些python脚本,这些脚本需要从某个文件夹中启动,但我想编写一个全局脚本,通过每个文件夹中单独的脚本运行每个python脚本。在

-获得者
--人物角色
---亚瑟
----开始.sh
--初始化.sh在

-人物角色
--亚瑟
---库
----pybot
-----pybot.py

当我运行初始化时,我的目标是使初始化运行“开始.sh“亚瑟是机器人,将有更多不同名称的文件夹,并用find和fire初始化每个文件夹开始.sh一

在初始化.sh我有:

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

在开始.sh我有:

^{pr2}$

我得到这个错误:

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

但是如果我运行开始.sh它本身从它的目录运行良好。这是因为我假设它是从正确的shell和相应的目录运行它。有没有办法让主脚本运行开始.sh在它自己的壳里就像它自己在运行一样?原因是因为pybot.py将一堆文件保存到开始脚本所在的位置,因为将有多个机器人,我需要他们保存在每个单独的文件夹。在


Tags: py目录脚本文件夹角色sh机器人全局
1条回答
网友
1楼 · 发布于 2024-05-10 21:18:22

首先,当你想叫它的时候不要来源

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

别这样。在

你的脚本有很多问题。它不会工作,因为你当前的工作目录是不确定的。您最好让您的脚本派生出路径,以使自己从abs路径或相对路径的拥挤中解脱出来。在

一般代码可以是

^{pr2}$

你可以用这个文件的路径

#!/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"

相关问题 更多 >