如何编写一个从文件中收集内容并输入命令的shell?它看起来像: $ command < inputfile 我不知道如何开始。
问问题
1383 次
4 回答
1
使用wc
为例:
$ wc < input_file > output_file
说明:
wc
:这是您正在调用的命令(或 shell 内置)< input_file
: 读取输入input_file
> output_file': write output into
输出文件`
请注意,许多命令将接受输入文件名作为其命令行参数之一(不使用<
),例如:
grep pattern file_name
awk '{print}' file_name
sed 's/hi/bye/g
文件名`
于 2012-11-16T03:06:12.943 回答
0
您需要将 shell 程序的输入文件描述符指向输入文件。在 c 中,它是通过调用int dup2(int oldfd, int newfd);
谁的工作使 newfd 成为 oldfd 的副本来实现的,如果需要,首先关闭 newfd。
在 Unix/Linux 中,每个进程都有自己的文件描述符,存储方式如下:
0 - 标准输入 (stdin) 1 - 标准输出 (stdout) 2 - 标准错误 (stderr)
因此,您应该将标准输入描述符指向您要使用的输入文件。这是我几个月前写的:
void ioredirection(int type,char *addr) {
// output append redirection using ">>"
if (type == 2) {
re_file = open(addr, O_APPEND | O_RDWR, S_IREAD | S_IWRITE);
type--;
}
// output redirection using ">"
else if (type==1) re_file = open(addr, O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
// input redirection using "<" or "<<"
else re_file = open(addr, O_CREAT | O_RDWR, S_IREAD | S_IWRITE);
old_stdio = dup(type);
dup2(re_file, type);
close(re_file);
}
于 2012-11-16T03:53:58.310 回答
0
您可以使用命令从 bash 脚本中的输入读取read
:
输入阅读器.sh
#!/bin/bash
while read line; do
echo "$line"
done
输出
$ echo "Test" | bash ./inputreader.sh
Test
$ echo "Line 1" >> ./file; echo "Line 2" >> ./file
$ cat ./file | bash ./inputreader.sh
Line 1
Line 2
$ bash ./inputreader.sh < ./file
Line 1
Line 2
于 2012-11-16T11:30:53.100 回答
0
你可以使用xargs
:
例如,您有一个文件,其中包含一些文件名列表。
cat your_file|xargs wc -l
wc -l
是您的命令
cat
,xargs
并将文件中的每一行作为输入传递给wc -l
所以输出将是输入文件中名称存在的所有文件的行数,这里主要是xargs
将每一行作为输入传递给wc -l
于 2012-11-16T12:05:05.947 回答