3

我正在编写一个名为“run”的 bash 脚本,它使用预定义的输入测试程序。

它将文件作为第一个参数,然后将程序作为第二个参数。

电话看起来像

./run text.txt ./check

例如,程序“run”会以 text.txt 作为输入运行“check”。这将为我节省大量的程序测试时间。

现在我有

$2 < text.txt > text.created

所以它接受 text.txt 并将其作为输入重定向到指定的程序,这是第二个参数。然后将结果转储到 text.created 中。

我在 text.txt 中有输入,我知道输出应该是什么样子,但是当我 cat text.created 时,它是空的。

有人知道以文件为输入运行程序的正确方法吗?这对我来说似乎很直观,但是“检查”程序是否有问题,而不是我在“运行”脚本中所做的事情?

谢谢!任何帮助都将受到赞赏!

编辑:文件 text.txt 包含多行文件,每个文件都有一个程序“检查”的输入。

也就是说, text.txt 可以包含

asdf1.txt asdf2.txt asdf3.txt

我想对每个文件 asdf1.txt、asdf2.txt、asdf3.txt 进行测试检查。

4

2 回答 2

2

操作员将文件的<内容重定向到程序的标准输入。这与使用文件的内容作为文件的参数不同——这似乎是你想要的。为此

./program $(cat file.txt) 

在 bash 中(或在普通的旧版本/bin/sh中,使用

./program `cat file.txt`

)。

这不会将多行作为单独的调用进行管理,您的编辑表明这是需要的。为此,您可能会使用某种脚本语言(perl、awk、python ......),这使得逐行解析文件变得容易。

于 2012-05-21T20:40:10.710 回答
2

一个简单的测试

#!/bin/sh

# the whole loop reads $1 line by line
while read
do
    # run $2 with the contents of the file that is in the line just read
    xargs < $REPLY $2
done < $1

工作正常。调用该文件“运行”并运行它

./run text.txt ./check

我将程序作为参数./check执行。text.txt不要忘记chmod +x run使其可执行。

这是我使用的示例检查程序:

#!/bin/sh

echo "This is check with parameters $1 and $2"

打印给定的参数。

我的文件text.txt是:

textfile1.txt
textfile2.txt
textfile3.txt
textfile4.txt

并且文件textfile1.txt, ... 每个“检查”实例都包含一行,例如:

lets go

或者

one two

输出:

$ ./run text.txt ./check
This is check with parameters lets and go
This is check with parameters one and two
This is check with parameters uno and dos
This is check with parameters eins and zwei
于 2012-05-21T20:35:54.707 回答