【问题标题】:bash script invoke another program with argumentsbash 脚本用参数调用另一个程序
【发布时间】:2013-11-05 15:34:52
【问题描述】:

我编写了一个 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 中读取一行并对其进行操作。

【问题讨论】:

  • 只是好奇,为什么你认为 bash 需要反引号? Perl 背景?

标签: bash


【解决方案1】:

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

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

【讨论】:

  • 谢谢。我明白了:)
猜你喜欢
  • 2011-05-12
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
相关资源
最近更新 更多