1

我编写了一个 bash 脚本,它通过传递一个参数来调用另一个脚本。在这种情况下,参数是一个包含几行的文件。

我做这样的事情:

#! /bin/bash

`python script.py -i input.txt /path/to/somefile`

现在, input.txt 包含如下行:

something 1
something 2
something 3

这里的问题是 input.txt 的每一行都被 bash 脚本评估为程序本身,而不是按原样传递给 script.py 程序。

因此,script.py 程序需要一个包含 3 行的文件作为输入,如上所示,而是接收一些其他输入(评估某事 1、某事 2 等的结果)。

如何将此文件作为参数传递给 script.py?

如果我像这样在 bash 脚本之外调用 script.py :

python script.py -i input.txt /path/to/somefile

它运作良好。script.py 一次从 input.txt 中读取一行并对其进行操作。

4

1 回答 1

3

删除python命令周围的反引号...我认为您误解了发生的情况,python输出被评估为命令,而不是input.txt.

反引号执行命令替换,与$(...相同)。例如在这里讨论,这里讨论。通常它用作命令的参数,例如ls -l $(cat filelist.txt),但它也可以作为整个命令使用。虽然如果你盲目地执行某个程序的任何输出,你最好确保你相信输出是正确的、值得信赖的并且没有任何允许 shell 命令注入的安全漏洞(阅读:不要这样做;-)...

于 2013-10-26T15:02:16.270 回答