Joh*_*ohn 4 shell-script text-processing
有文件 A、B、C。我想连接文件 A、B 和 C(跳过 C 的第一行)。然后将它们作为输入发送到 myProgram。我怎样才能在shell脚本中写这个?
我是这么写的
cat A > file
echo >> file //want to start all contents in new line
cat B >> file
tail -n+2 C >> file
./myProgram < file
Run Code Online (Sandbox Code Playgroud)
但我不知道如何连接它们并发送到程序而不生成文件
Gil*_*not 12
尝试这个 :
{ cat A ; echo; cat B ; awk 'NR>1' C ; } | programm
Run Code Online (Sandbox Code Playgroud)
将命令放在大括号内是分组。
;
如果没有换行符来完成分组,则不是强制性的。
并且这里不需要另一个子shell ;)
使用进程替换
./myProgram < <(cat A; echo ''; cat B; tail -n +2 C)
Run Code Online (Sandbox Code Playgroud)
<(commands)
创建一个 fifo 文件,然后读入程序
你可以通过做测试
$ echo <(cat A; echo ''; cat B; tail -n +2 C)
/dev/fd/63
在支持命名管道 (FIFO) 或命名打开文件的 /dev/fd 方法的系统上支持进程替换。它采用 <(list) 或 >(list) 的形式。进程列表运行时其输入或输出连接到 FIFO 或 /dev/fd 中的某个文件。该文件的名称作为扩展的结果作为参数传递给当前命令。如果使用 >(list) 形式,写入文件将为列表提供输入。如果使用 <(list) 形式,则应读取作为参数传递的文件以获得 list 的输出。如果可用,进程替换与参数和变量扩展、命令替换和算术扩展同时执行。
小智 5
使用子shell。在子 shell 中运行命令并将输出通过管道传输到您的程序。
(cat a; echo; cat b; tail -n+2 c) | ./myProgram
Run Code Online (Sandbox Code Playgroud)