Skip to content

输入输出与文件操作

  • 状态:已验证
  • 来源:对话整理
  • 更新时间:2026-03-12

关键结论

  • Shell 输入输出部分的核心是文件操作、重定向、管道、文件描述符和 here 文本。
  • 大多数脚本 I/O 错误都来自重定向顺序、引用不当和对标准输入输出行为理解不清。

详细分析

  • >, >>, <, 2>, 2>&1 和管道是最常见的 I/O 语法。
  • here document 和 here string 适合快速构造多行或单行输入,能减少临时文件使用。

可执行步骤

  1. 明确当前命令读写的是标准输入、标准输出还是标准错误。
  2. 需要保存输出时,优先显式写出重定向目标。
  3. 需要多行固定文本时使用 here document。
  4. 需要单个字符串输入时使用 here string。

命令 / 配置 / 代码

高频写法清单:

  • cmd > file
  • cmd >> file
  • cmd 2>&1
  • cmd1 | cmd2
  • cat <<'EOF'
  • grep x <<< "text"
  • exec 3>file

文件与目录操作

  • mkdir -p dir 递归创建目录。
  • cp src dst 复制文件。
  • mv src dst 移动或重命名文件。
  • rm file 删除文件。
bash
mkdir -p logs
cp "$src" "$dst"
mv "$src" "$dst"
rm "$file"

重定向与管道

  • > 覆盖写入标准输出到文件。
  • >> 追加标准输出到文件。
  • < 从文件读取标准输入。
  • 2> 将标准错误写入文件。
  • 2>&1 将标准错误合并到标准输出。
  • | 管道,将前一个命令输出传给后一个命令。
bash
echo "hello" > out.txt
echo "hello" >> out.txt
cmd < input.txt
cmd > out.txt
cmd 2> err.txt
cmd > out.txt 2>&1
cmd1 | cmd2

文件描述符

  • 0 标准输入。
  • 1 标准输出。
  • 2 标准错误。
  • exec 3>file 打开自定义文件描述符。
  • exec 3>&- 关闭自定义文件描述符。
bash
exec 3>debug.log
echo "debug message" >&3
exec 3>&-

here document

  • <<EOF 读取直到分隔符的多行输入。
  • <<'EOF' 禁止变量展开和命令替换。
bash
cat <<'EOF' > note.md
# Title
content
EOF

here string

  • <<< "text" 将单个字符串作为标准输入传给命令。
bash
grep "a" <<< "abc"

风险与注意事项

  • 重定向顺序会影响结果,特别是 2>&1 的位置。
  • 路径、参数和变量通常都应加双引号。
  • 删除文件前应确认变量已正确展开,避免误删。