Linux_重定向

有哪些

有标准输入、标准输出重定向。
有命令代换。
有管道。

标准输出重定向

1
2
3
4
5
6
#include <stdio.h>
int main()
{
printf("C Program!\n");
return 0;
}

编译为a.out
>为完全覆盖写。

1
./a.out > aa.txt

目前aa.txt内容为

1
C Program!

>>为追加写。

1
./a.out >> aa.txt

目前aa.txt内容为

1
2
C Program!
C Program!

我们想在命令行把程序执行后的输出结果输出到文件中时,可以这样:./cmpxz DCE 20250709 >log.txt 2>&1

标准输入重定向

1
2
3
4
5
6
7
8
#include <stdio.h>
int main()
{
char str[50];
scanf("%s", str);
printf("%s\n", str);
return 0;
}

编译为b.out

1
./b.out < "hello"

提示:

所以标准输入重定向不能是简单的字符串,而是要重定向到一个文件。
先用echo把一些内容输入到一个文件中:

1
2
echo "hello" > aa.txt
./b.out < aa.txt

执行结果:

1
hello

管道

我们上面讲的标准输入、标准输出重定向都是文件和程序之间的交互。
而管道是进程之间的交互。

用上面的a.outb.out示例一下管道:

1
./a.out | ./b.out

执行结果:

1
C

(没有显示全C Program!,是因为中间有空格,scanf只输入了空格前的C字符。)

命令代换

Command Substitution

形如:

1
2
var2=$(./a.out)
var3=$(./1st.sh)

即,可以把程序、shell脚本运行的结果写入到环境变量中。

便于脚本编写中涉及到的命令中转,可以先保存到环境变量中。使用命令代换,避免了在代码中编写读写文件的繁琐。