Hacker News 中文摘要

RSS订阅

让生活更轻松(且保持理智)的Shell技巧 -- Shell Tricks That Make Life Easier (and Save Your Sanity)

文章摘要

文章介绍了提高Shell效率的实用技巧,包括通用快捷键(如Emacs式行编辑)和Bash/Zsh特有功能,帮助开发者减少重复操作,提升命令行使用体验。

文章总结

真正提升效率的Shell技巧(拯救你的理智)

看着一位才华横溢的工程师为了修改行首的拼写错误而长按退格键六秒钟,这种痛苦感同身受。

我们都经历过这样的阶段:学会了lscdgrep后,学习就停滞了。终端成了我们的常驻之地,却很少去优化使用体验。我们默认某些操作需要敲击四十次键盘,却不知道shell开发者早在1989年就解决了这些痛点。

本文将分享一些并非机密但常被忽视的技巧。为保持Unix家族的和谐,这些技巧分为两类:适用于几乎所有POSIX兼容shell(如FreeBSD的sh或OpenBSD的ksh)的通用技巧,以及专为Bash或Zsh等交互式shell设计的增强功能。

通用技巧

这些技巧基于标准终端行规范或POSIX特性,即使连接到2009年的嵌入式路由器或极简Alpine容器也能使用。

高效编辑

  • CTRL + W:快速删除光标前的单词
  • CTRL + U/K:剪切至行首/行尾(配合CTRL + Y粘贴)
  • CTRL + A/E:跳转到行首/行尾
  • ALT + B/F:按单词前后移动(Mac需设置Option键为Meta)

终端恢复

  • reset:当终端因显示二进制文件乱码时,快速恢复显示

流程控制

  • CTRL + C:立即终止当前命令
  • CTRL + D:发送EOF信号(空命令行时会退出shell)

目录导航

  • cd -:在最近两个目录间快速切换
  • pushd/popd:实现目录栈的多级跳转

文件操作

  • > file.txt:清空文件内容但保留文件属性
  • $_:引用上条命令的最后一个参数,避免重复输入长路径

脚本安全

  • set -e:命令失败时立即退出(注意条件语句的边界情况)
  • set -u:防止使用未定义变量导致灾难(如误删系统目录)

Bash/Zsh增强技巧

历史命令

  • CTRL + R:逆向搜索命令历史
  • !!:重复上条命令(常用sudo !!快速提权执行)

高级编辑

  • CTRL+X CTRL+E:在默认编辑器中编辑当前命令(Zsh需配置)
  • fc:跨shell兼容的历史命令编辑方案

参数复用

  • ESC + .:插入上条命令的最后一个参数
  • !$:自动展开为上条命令的末参数

高效操作

  • 花括号扩展cp file{,.bak}快速创建备份
  • 进程替换diff <(sort a) <(sort b)直接比较处理结果
  • **通配符:递归匹配子目录文件(替代find命令)
  • 后台任务CTRL+Zbgdisown三步实现进程托管

日志记录

  • |& tee:同时捕获标准输出和错误输出到日志文件

实践建议

shell是工具箱而非障碍场。建议每周掌握一个新技巧,逐步改造你的终端使用体验。记住:现在这是属于你的领地。

(注:本文保留了原技术文档的核心内容,删减了部分非技术性描述和特定平台说明,优化了中文表达逻辑)

评论总结

以下是评论内容的总结:

1. 对命令行技巧的混合评价

  • 正面评价:部分用户认为文章介绍了一些实用技巧(如fcEsc .等),并愿意尝试(评论3、评论21)。
    • "Never heard of instant truncate, nor fc, nor Esc .... Quite a few useful ones"(评论3)
    • "I didn't know the ALT + . trick... it cycles through your history"(评论21)
  • 负面评价:有用户认为文章内容像LLM生成,缺乏实际经验(评论23),且部分技巧依赖非POSIX标准(如Emacs模式)(评论4、6)。
    • "The article is relying on some Emacs mode, which is not POSIX"(评论4)
    • "Is it just me, or is it an LLM language? The article tries very hard to be correct but somehow lacks experience"(评论23)

2. 对特定功能的讨论

  • 历史记录管理
    • 使用#注释命令便于后续检索(评论2、15、18)。
      • "Makes for a definite return of sanity"(评论2)
      • "Prepend the line with # to comment it... then up arrow to retrieve"(评论15)
    • 空格开头的命令不记录历史,引发争议(评论12支持,评论19反对)。
      • "Really useful for one-off commands"(评论12)
      • "This drives me mad"(评论19)
  • 快捷键争议
    • Ctrl+W可能误关闭浏览器标签(评论5)。
    • Vim模式与Emacs模式的偏好(评论4、6、11)。
      • "The vi editing mode is... the most deeply standardized"(评论4)
      • "Using the terminal becomes much more cozy after I activate vim-mode"(评论11)

3. 对现代工具的替代观点

  • 部分用户认为AI工具(如LLM)已减少学习命令行工具的必要性(评论10)。
    • "I find little value in learning new tools anymore, just feed it docs"(评论10)
  • 也有用户坚持优化传统工具(如ZSH启动时间)(评论20)。
    • "Profile your ZSH startup time! Stuff like NVM or Oh My ZSH will add seconds"(评论20)

4. 实用技巧分享

  • Ctrl+R快速搜索历史命令(评论7、13)。
    • "Ctrl+r is your friend. ctrl+r"(评论7)
  • cd -git checkout -切换路径(评论9)。
    • "Gotta love 'git checkout -'"(评论9)
  • 使用| sudo tee file处理权限问题(评论13)。
    • "When current user does not have permission to >file"(评论13)

5. 安全警告

  • 慎用sudo !!避免意外执行危险命令(评论17)。
    • "Very easy to accidentally trigger... running some undesired command as root"(评论17)

总结呈现了评论中对命令行技巧的实用性与标准化争议、历史管理偏好、现代工具替代性,以及安全注意事项的多元观点。