4

如何编写一个从文件中收集内容并输入命令的shell?它看起来像: $ command < inputfile 我不知道如何开始。

4

4 回答 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是您的命令 catxargs并将文件中的每一行作为输入传递给wc -l

所以输出将是输入文件中名称存在的所有文件的行数,这里主要是xargs将每一行作为输入传递给wc -l

于 2012-11-16T12:05:05.947 回答