开发者生态
morning
告诉计算机做事
摘要
Telling a Computer to Do Things For the first few years of my career, I didn’t know how to tell my computer to do things. I could kick off a few commands from the terminal – run those tests, install t...
the
that
was
install
one
and
programs
computer
could
commands
2026-09-20
1 阅读
约6分钟阅读
vismit2000
字号:
让计算机做事 在我职业生涯的最初几年,我不知道如何让我的计算机做事。我可以从终端启动一些命令 – 运行这些测试,安装该依赖项,启动该容器,通过 ssh 连接到该机器 – 但我只能一次运行一个简单的命令。我的终端是世界上最糟糕的 GUI,我认为 shell 是启动没有应用程序包装器的程序的方式。 --command-- mocha git brew install npm install rm 从根本上讲,我无法告诉我的计算机完成任何涉及逻辑或将多个程序拼接在一起的事情,例如: 做一件事,然后做另一件事 如果命令失败,则注销错误消息 在计算机启动时启动程序 同时运行两个命令 循环遍历目录中的所有文件并对每个文件执行操作 使用一个命令的输出作为另一个命令的输入 理论上,我可以使用 NodeJS 来编写这些命令各种节目。实际上,我从来没有这样做过。这部分是心态:我不习惯将在命令行上使用的程序视为我可以控制的东西。剩下的就是缺乏技能:我不了解我正在使用的程序,无法将它们集成到我编写的脚本中。不过,我一直在努力学习 shell,慢慢地我可以通过像这样具有基本逻辑的脚本来摸索自己的方式:set +e npm install status_code = $?如果[[“$status_code”! =“0”]];然后 echo“您的 npm 安装出了问题。检查您的 ~/.npmrc 以确保它已通过我们的注册表验证。” exit 1 fi set -e 根据您对 shell 脚本的熟悉程度,您现在可能会胡言乱语。对不起。 (如果你的眼睛还没有流血,那么你应该这样做:)尽管我编写的命令和脚本有问题,但这对我来说是变革性的;我突然有能力告诉我的计算机将现有程序拼接在一起以实现我的目标。这感觉有点像最初从学习到编程所带来的变化。这些年来,我慢慢地开始学习更多的 shell 工具并弄清楚 shell 语法。我经常会学习一种新工具或模式,然后当我意识到如果我没有使用锤子来解决需要钻头的问题时,过去的问题会容易解决得多,就会感到一阵痛苦。在那段时间里,我与大量(非常强大!)的工程师一起工作,他们没有花太多时间学习 shell,而是依靠 GUI 来完成诸如运行测试、管理 git、与数据库对话以及执行日常任务之类的事情。依赖 GUI 效果很好,除非您想要完成 GUI 无法处理的事情,而且我认为您很容易陷入一种仅限于 GUI 能力的思维模式。我见过熟练的工程师花费大量精力,因为他们不知道如何使用 while 来继续运行命令或编写 for 循环来对目录中的每个文件执行相同的操作。我认为在编辑和维护 shell 脚本时,同样的 GUI 焦点可能会成为一个问题。我敢打赌大多数公司都有相当多的基本逻辑来使用 Bash 或 Zsh 等语言构建、部署、验证代码和测试。如果您对工具内置的语言不满意,那么您将无法轻松阅读或改进它。您可能能够告诉远程服务器您的代码如何运行,但无法告诉计算机您正在研究如何并行运行 linting 和测试等操作 - 这真是太糟糕了!让我们停下来快速绕一下:为什么这么多脚本最终都是用不是团队使用的主要语言编写的?我认为,用一种易于将命令拼接在一起的语言来编写将命令拼接在一起的脚本通常更符合人体工程学。让我们举一个运行测试直到失败的超级简单示例: while pnpm exec mocha ./pathToFile.test.ts;做真实的事;完毕 。这种语法有明显的批评之处,但让我们看看它在 NodeJS 中的样子: const { execSync } = require ( "child_process" ); while ( true ) { try { execSync ( `pnpm exec mocha ./pathToFile.test.ts` , { stdio : "继承" }); } catch ( err ) { 控制台 .错误(“失败”,错误);休息 ;这里有很多粗糙的边缘和陷阱,我个人认为 shell 更容易!我不需要担心创建文件、需要 child_process 或设置 { stdio: "inherit" } 来查看输出。这是一个非常简单的示例,甚至没有用管道将多个程序拼接在一起、捕获任何输出或使用临时文件! 💡 这并不意味着您需要放弃使用 Bash 或 Zsh 或任何类似语言进行编写!对于熟悉 JavaScript 的团队来说,我喜欢的一个工具是 zx 。我认为编写这些脚本可以使这些脚本非常符合人体工学
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱