# 输入/输出重定向 ## 输出重定向 在终端中,可以使用 `>` 或 `>>` 将输出重定向到文件中,其中 `>` 表示覆盖文件,`>>` 表示添加到文件的尾行。 ```txt command > file ``` 例如,`echo` 命令将输出指定的变量或字符串,可以通过输出重定向快速写入内容到文件,例如想在 `.bashrc` 的尾行加入一条内容 `alias ll='ls -lh --color=auto'`: ```bash echo "alias ll='ls -lh --color=auto'" >> .bashrc ``` 这将在尾行追加该内容,你也可以使用 `>` 覆盖整个文件。 ## 输入重定向 可以将文件内容使用 `<` 输入给命令: ```txt command < file ``` `wc -m` 命令可以统计字数,通过输入重定向,即可统计文件字数,例如统计 `README.md` 文件字符数: ```bash wc -m < README.md ``` 内容将以字符串传递给前方命令,即使该命令和 `wc -m README.md` 效果一样,但前者通过倾向于统计字符串个数,后者倾向于读取文件内字符串个数。 ## 过滤文件描述符的输出重定向 文件描述符是操作系统中用于标识打开的文件的一个整数。 在 Unix 和 Linux 系统中,每个进程在启动时会自动打开三个标准的文件描述符: - `0`:标准输入(stdin) - `1`:标准输出(stdout) - `2`:标准错误(stderr) 使用 `n>` 的方式来过滤输出,其中 `n` 为指定的文件描述符。 例如要将错误信息输出到文件 `error.log` 中,可以使用如下格式的命令 ```txt command 2> error.log ``` 同样的,你可以用 `n>>` 的方式将输出追加到文件尾行。 ## Here Document 使用 `<<` 可以交互式将输入内容输入到 Shell 程序中,例如在终端中输入以下命令,回车后将允许你继续输入内容,直到你再此输入 `maker`,`maker`是一个标记,你可以将他替换为任意字符串。 ```txt $ wc -m << maker > Acovia docs > maker 12 $ ``` ## 组合重定向 如果你希望将多个文件描述符的内容写入文件,可以组合写入,格式如下: ```txt command > out.log 2>&1 ``` `&` 将合并这两个输入符的输出。