如何编写一个从文件中收集内容并输入命令的shell? 它看起来像:$ command<输入文件 我不知道如何开始。
答案 0 :(得分:1)
以wc
为例:
$ wc < input_file > output_file
<强>解释强>:
wc
:这是您正在调用的命令(或内置shell)< input_file
:从input_file
> output_file': write output into
output_file` 请注意,许多命令会接受输入文件名作为其cmdline参数之一(不使用<
),例如:
grep pattern file_name
awk '{print}' file_name
sed 's/hi/bye/g
file_name` 答案 1 :(得分:0)
您需要将shell程序的输入文件描述符指向inputfile。在c中,通过调用int dup2(int oldfd, int newfd);
来实现,其作业是使newfd成为oldfd的副本,必要时首先关闭newfd。
在Unix / Linux中,每个进程都有自己的文件描述符,存储方式如下:
0 - 标准输入(标准输入) 1 - 标准输出(标准输出) 2 - 标准错误(stderr)
因此,您应该将stdin描述符指向要使用的输入文件。 这是我几个月前写的:
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);
}
答案 2 :(得分:0)
您可以使用命令read
来读取bash脚本中的输入:
<强> inputreader.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
答案 3 :(得分:0)
您可以使用xargs
:
cat your_file|xargs wc -l
wc -l
是你的命令
cat
和xargs
会将文件中的每一行作为wc -l
因此输出将是输入文件中名称存在的所有文件的行数
这里的主要内容是xargs
会将每一行作为wc -l