Subprocess bash脚本:未找到命令

问题描述 投票:0回答:1

以下python脚本:

def run_build(path):
    cmd = path + '/build.sh'
    p = subprocess.call(cmd)

以下bash脚本执行了另外两个脚本:

#!/bin/bash
cd "${0%/*}"
echo $(./create_env.sh)
echo $(./set_webhook.sh)
echo $(docker-compose up -d --build)

create_env.sh:

#!/bin/bash
PORT=$(comm -23 <(seq 7000 8000 | sort) <(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep "[0-9]\{1,5\}" | sort -u) | head -n 1)
MONGODB_PORT=$(comm -23 <(seq 27017 27100 | sort) <(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep "[0-9]\{1,5\}" | sort -u) | head -n 1)

destdir=$PWD/.env
echo >> "$destdir"
echo "APP_PORT=$PORT" >> "$destdir"
echo "MONGODB_PORT=$MONGODB_PORT" >> "$destdir"

输出为:

Path: /home/navka/Environments/teststartupservicebot/build.sh
./create_env.sh: line 2: head: command not found
./create_env.sh: line 2: comm: command not found
./create_env.sh: line 2: seq: command not found
...

我的问题在哪里?谢谢!

python bash subprocess
1个回答
1
投票

我会说您的第一步步骤将是放置:

echo $PATH

作为#!/bin/bashcreate_env.sh shebang行之后的第一行,以确保路径已设置。

确保它包含那些可执行文件的目录(可能是/usr/bin),您可以通过从命令行执行(例如)which commwhere comm来找到这些目录。

如果它没有包含相关目录,这说明了为什么找不到可执行文件。在这种情况下,您将需要发现为什么它们不存在。

也许最简单的解决方法就是添加类似以下内容:

PATH="${PATH}:/usr/bin"

到您的环境设置脚本。这将确保路径does具有相关条目。


并且,顺便说一句,如果build.sh中的这些行是要累积的(例如,set_workbook需要由create_env进行的环境更改,则应注意,这些行当前在sub -shells,这意味着从子shell退出后,更改不会持续。

在将它们持久保存到文件中时不一定是这种情况,后续步骤可以读取。

如果do需要在环境中进行后续步骤(而不是文件)的更改,则需要在当前shell的上下文中提供它们,例如:

. ./create_env.sh

正如我说过的,这可能不是必需的,但是为了以防万一,您可能需要研究一下。

© www.soinside.com 2019 - 2024. All rights reserved.