这里的基本思路是从每个curl调用中的asd目录调用1个文件,从output.txt文件调用1行:
#!/bin/bash
python MJD.py -> output.txt
FILES=/home/user/asd/*
for f in $FILES
do
filename="$output.txt"
while read -r line
do
curl -F ID='zero' -F dir="@$f" -F TIME="$line" -F outputFormat=json "http://blabla"
done
done
此代码实际调用python脚本并将输出保存在output.txt文件中。对于多行,输出文件在每行上只有1个数字。现在我要做的是从第一行开始,获取-F TIME =“文本文件中的一个值”。
我不知道我的代码的哪一部分导致了这个问题。当我调用这个脚本时,从dir调用文件的部分可以正常工作,但是每次在屏幕上显示TIME = 0时,看起来没有从output.txt文件中读取任何内容。我在这里缺少什么?
答案 0 :(得分:2)
这是process substitution和exec
的好地方:
#!/bin/bash
exec 4< <( python MJD.py - )
# now, the output from the python script can be read from channel 4
for file in /home/user/asd/*; do
IFS= read -u4 -r time # get the next line from MJD.py
curl -F ID='zero' -F dir="@$file" -F TIME="$time" -F outputFormat=json "http://blabla"
done
指定了exec“技巧”in the manual:
exec [-cl] [-a name] [command [arguments]]
[...]如果未指定命令,则可以使用重定向来影响当前的shell环境。
答案 1 :(得分:0)
您没有在输出文件中输入内部循环,请尝试:
#!/bin/bash
python MJD.py > output.txt
FILES=/home/user/asd/*
for f in $FILES
do
filename="output.txt"
while read -r line
do
curl -F ID='zero' -F dir="@$f" -F TIME="$line" -F outputFormat=json "http://blabla"
done < "$filename"
done
虽然,既然您已经在使用Python,为什么不在Python中编写所有逻辑并在一个地方处理所有内容?