command-line - 节点 - 运行最后一个 bash 命令
问题描述
怎么了:
- 用户通过任何变体启动本地反应服务器
npm [run] start[:mod]
- 如果找到我的
prestart
脚本运行并杀死本地网络服务器 - 一旦
pkill node
运行,这也会杀死npm start
脚本,所以我想再次运行启动命令。
我目前的解决方案是
history 1 | awk '/some-regex/
获取我可以运行的最后一个命令的名称
exec('bash -c 'sleep 1 ; pkill node && ${previousCommand}' &')
这开始变得非常老套,所以我认为必须有更好的方法来做到这一点。
到目前为止我的节点脚本:
const execSync = require("child_process").execSync;
const exec = require("child_process").exec;
const netcat = execSync('netcat -z 127.0.0.1 3000; echo $?') == 1 ? true : false; // true when :3000 is available @jkr
if(netcat == false) {
exec(`bash -c 'sleep 1 ; pkill node' &`);
console.warn('\x1b[32m%s\x1b[0m', `\nKilling all local webservers, please run 'npm start' again.\n`);
}
解决方案
似乎有一个 npm 包可以做到这一点:kill-port
const kill = require('kill-port')
kill(port, 'tcp').then(console.log).catch(console.log)
来源:https ://www.npmjs.com/package/kill-port
我知道这可能无法回答运行最后一个命令的问题,但应该可以解决 OP 的问题。
推荐阅读
- sql - SQL 表示人口占德国的百分比
- java - 如何在 thenAccept 方法中访问 Callable Task 的输入参数?
- python - 获取具有相同 ID 但日期较早的行数
- python - Selenium Python 找到动态更改有时隐藏的下载链接的元素?按钮?
- jquery - 如何为现有类(wordpress)增加更多价值?
- angular - 社交登录问题
- android - 使用实时数据库和 recyclerview 进行大小写敏感搜索
- r - 如何在ggplot中的月度/年度数据上显示十年趋势
- cookies - 为什么将刷新令牌存储在仅 HTTP 的 Cookie 中以防止 CSRF 攻击?
- php - 使用 jAutoCalc 时动态表单插入 SQL php