使用bash脚本将单个行从文件传递到python脚本

时间:2014-07-11 04:39:11

标签: python linux bash shell

这可能是一个简单的问题,但我是新手来编写脚本并且花了很多时间在这上面没有运气;我希望我能在这里得到答案。

我正在尝试编写一个bash脚本,该脚本从文本文件中读取单独的行,并将它们作为python脚本的参数传递。我有一个文件列表(我已将其保存到单个文本文件中,所有文件都在单独的行中),我需要在我的python脚本中用作参数,并且我想使用bash脚本将它们全部发送出去。当然,我可以采取繁琐的方式将其余的python命令复制/粘贴到脚本中的各行,但我认为有一种方法可以使用“read line”命令执行此操作。我尝试了各种各样的命令组合,但这是我最近的命令:

#!/bin/bash
# Command Output Test

cat infile.txt << EOF
while read line
do
    VALUE = $line
    python fits_edit_head.py $line $line NEW_PARA 5
    echo VALUE+"huh"
done

EOF

当我这样做时,我返回的只是输入文件中的各行。我有额外的VALUE,看看它是否会打印出来,但事实并非如此。显然,“读取线”命令有一些简单的东西,我不明白,但在搞了很长时间之后,我不知道它是什么。我承认我仍然是这个bash脚本游戏的新手,而不是那个非常好的游戏。任何帮助肯定会受到赞赏。

1 个答案:

答案 0 :(得分:0)

你可能意味着:

while read line; do
    VALUE=$line   ## No spaces allowed
    python fits_edit_head.py "$line" "$line" NEW_PARA 5  ## Quote properly to isolate arguments well
    echo "$VALUE+huh"  ## You don't expand without $
done < infile.txt

Python也可能会读取STDIN,因此它可能会意外地从infile.txt读取输入,因此您可以使用另一个文件描述符:

while read -u 4 line; do
     ...
done 4< infile.txt

更好的是,如果您使用Bash 4.0,使用readarray会更安全,更清洁:

readarray -t lines < infile.txt
for line in "${lines[@]}; do
    ...
done