将文件变量从python脚本传递到bash脚本

时间:2020-11-06 19:37:51

标签: python bash

我在将python变量(1个文件)传递到bash脚本时遇到问题。 python程序提取文件(csv文件)并将其分配给var1,然后将其传递给bash脚本。 bash脚本将其上传到服务器。 bash脚本有效,但是当我尝试将文件变量从python传递到bash时,它不起作用。看起来变量是空的,我只得到正在加载到服务器中的文件名,而不是数据。所有文件都位于同一文件夹(upload.py,upload_files.sh,data_file.csv)中,这是我的新手,所以对您的帮助非常感谢。

python脚本

import subprocess

var1 = "data_file.csv"
subprocess.call(["bash", "upload_files.sh", var1])

BASH脚本(信息已更改的部分bash脚本)

    #!bin/bash
    #
    export HOST=example_server.com

    export DATA_FILE=$1
    #
    curl -X PUT -L --header "Content-Type: text/csv" --data-binary@${DATA_FILE} "https://${HOST}:21/sserver/api/v3/fs/server-1/bulk_upload/${DATA_FILE}"

2 个答案:

答案 0 :(得分:1)

变量值的var1="data_file.csv"左侧使用引号,如果使用语音标记,则变量将展开。

如果您想使用单引号来避免额外的转义,您可以改为在同一参数中混合使用引号:

$ echo 'single quoted. '"Double quoted. "'Single quoted again.' 单引号。双引号。单引号再次被引用。

$ echo '"$name" has the value '"$name" "$name"的价值是世界

答案 1 :(得分:0)

您在--data-binary和引号后面缺少空格

curl -X PUT -L --header "Content-Type: text/csv" --data-binary "@${DATA_FILE}" "https://${HOST}:21/sserver/api/v3/fs/server-1/bulk_upload/${DATA_FILE}"