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

时间:2017-11-06 01:04:09

标签: python linux bash shell

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

-Obtainer
--Persona
---亚瑟
----start.sh
--Initialise.sh

-Persona
--Arthur
--- LIB
---- pybot
-----pybot.py

当我运行初始化时,我的目标是使初始化运行“start.sh”Arthur是机器人,并且将有更多具有不同名称的文件夹,并使用find和fire初始化每个start.sh。

在initialise.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运行它,因此目录。有没有办法让主脚本在它自己的shell中运行start.sh,就像它自己运行一样?原因是因为pybot.py将一堆文件保存到启动脚本所在的位置,并且因为将有多个bot需要它们保存在每个单独的文件夹中。

1 个答案:

答案 0 :(得分:1)

首先,当你的意思是打电话时,不要采购,

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