Appearance
输入输出与文件操作
- 状态:已验证
- 来源:对话整理
- 更新时间:2026-03-12
关键结论
- Shell 输入输出部分的核心是文件操作、重定向、管道、文件描述符和 here 文本。
- 大多数脚本 I/O 错误都来自重定向顺序、引用不当和对标准输入输出行为理解不清。
详细分析
>,>>,<,2>,2>&1和管道是最常见的 I/O 语法。- here document 和 here string 适合快速构造多行或单行输入,能减少临时文件使用。
可执行步骤
- 明确当前命令读写的是标准输入、标准输出还是标准错误。
- 需要保存输出时,优先显式写出重定向目标。
- 需要多行固定文本时使用 here document。
- 需要单个字符串输入时使用 here string。
命令 / 配置 / 代码
高频写法清单:
cmd > filecmd >> filecmd 2>&1cmd1 | cmd2cat <<'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
EOFhere string
<<< "text"将单个字符串作为标准输入传给命令。
bash
grep "a" <<< "abc"风险与注意事项
- 重定向顺序会影响结果,特别是
2>&1的位置。 - 路径、参数和变量通常都应加双引号。
- 删除文件前应确认变量已正确展开,避免误删。