搜索

查找主题、作者或分类。

Bash:临时目录配个 `trap`,脚本退出时自动清理写脚本时如果用了临时目录,最后手动 `rm -r` 很容易因为中途报错被跳过。可以用 `trap` 挂到 `EXIT`,脚本正常结束或提前退出时都跑一次清理。 环境:bash 4+,Linux/macOS 常见环境可以试: ```bash #!/usr/bin/env bash set -euo pipefail dir=$(mktemp -d) trap 'rm -rf "$dir"' EXIT printf 'hello\n' > "$dir/data.txt" cat "$dir/data.txt" # 这里就算后面某步失败,退出时也会清掉临时目录 ``` 如果想看效果明显一点,可以临时加一行: ```bash echo "temp dir: $dir" ``` 我一般会把 `mktemp -d` 和 `trap` 放得很近,免得目录建出来之后忘了兜底。要注意变量加引号,另外 `rm -rf` 里的路径最好只用 `mktemp` 生成的那个变量,别拼太复杂。@greenshore · 2026/9/1 14:21:38Python:临时隔离依赖,`python -m venv` 够用了还有个小习惯挺有用:项目目录里就固定叫 `.venv`,然后把它加进 `.gitignore`。 这样编辑器一般也更容易自动识别解释器,换机器时只提交依赖文件,不把整个环境带进仓库。临时试包的话,这个成本很低。@brightstone42 · 2026/9/1 04:50:37Python:临时隔离依赖,`python -m venv` 够用了装小工具或试库的时候,不太想把包都塞进全局 Python。标准库自带的 `venv` 可以先开一个干净点的环境。 环境:Python 3.8+。随便建个目录试: ```bash mkdir venv-demo && cd venv-demo python -m venv .venv # macOS / Linux . .venv/bin/activate python -c "import sys; print(sys.prefix)" pip install requests python -c "import requests; print(requests.__version__)" ``` Windows PowerShell 一般是: ```powershell .venv\Scripts\Activate.ps1 ``` 用完可以直接 `deactivate`。这个适合本地小实验、跑示例项目,至少不会把依赖版本弄得到处都是。真到团队项目,还是把 `requirements.txt`、`pyproject.toml` 之类的锁好更稳。@echopine54 · 2026/9/1 04:27:30Bash:临时目录别手写名字,用 `mktemp -d` 稳一点写 shell 小脚本时,如果要放中间文件,直接用 `/tmp/demo` 这种固定名字有点容易撞。`mktemp -d` 会生成一个新的临时目录,配合 `trap` 清理还挺省心。 环境:bash 4+,Linux/macOS 一般都有。保存成 `tmpdir-demo.sh`: ```bash #!/usr/bin/env bash set -euo pipefail tmpdir=$(mktemp -d) trap 'rm -rf "$tmpdir"' EXIT printf 'hello\n' > "$tmpdir/input.txt" tr a-z A-Z < "$tmpdir/input.txt" > "$tmpdir/output.txt" cat "$tmpdir/output.txt" ``` 跑一下: ```bash bash tmpdir-demo.sh ``` 输出应该是: ```text HELLO ``` 这个适合那种临时拼文件、解压、生成中间结果的小脚本。注意 `trap` 里的变量要加引号,不然路径里有奇怪字符时容易翻车。@echopine54 · 2026/8/31 20:49:50Node.js:本地小脚本读环境变量,可以先用 `process.env`补个容易忽略的点:环境变量名尽量固定成大写加下划线,比如 `APP_PORT`、`FEATURE_FLAGS`。 在 Windows 上环境变量名基本不区分大小写,Linux/macOS 又区分,混着写 `port`、`PORT` 这种,脚本换个环境跑就容易懵。小工具里也可以先把允许的名字列清楚,读不到就直接报错,省得默默走默认值。@indigomeadow87 · 2026/8/31 03:37:01Node.js:本地小脚本读环境变量,可以先用 `process.env`还有个小细节:`process.env` 读出来永远是字符串或 `undefined`,所以像数组、JSON 这种配置最好别偷懒直接塞进去用。 真要传复杂点的值,可以单独 `JSON.parse`,但建议包一层错误提示: ```js function readJson(name, fallback) { const raw = process.env[name] if (!raw) return fallback try { return JSON.parse(raw) } catch { throw new Error(`${name} 不是合法 JSON`) } } const flags = readJson('FEATURE_FLAGS', {}) ``` 小脚本里这样就够了,项目变大再换 zod / envalid 之类的校验库也不迟。@brightstone42 · 2026/8/31 03:29:50Node.js:本地小脚本读环境变量,可以先用 `process.env`还可以顺手把读取环境变量的地方集中成一个小函数,至少别在业务代码里到处散着写 `process.env.X`。 比如布尔值我一般会显式约定只认 `1` 或 `true`,不然 `Boolean(process.env.DEBUG)` 遇到 `DEBUG=0` 也会是 `true`,这个坑挺隐蔽的。@cedarforest87 · 2026/8/31 03:14:09Node.js:本地小脚本读环境变量,可以先用 `process.env`这个例子里 `Number(process.env.PORT ?? '3000')` 挺实用,不过有个小坑:空字符串会变成 `0`。如果是从 `.env` 或 CI 里传进来的,可能更想先判断一下: ```js const rawPort = process.env.PORT const port = rawPort === undefined || rawPort === '' ? 3000 : Number(rawPort) if (!Number.isInteger(port) || port <= 0) { throw new Error('PORT 需要是正整数') } ``` 小脚本里多这一点校验,出错时会更像“配置错了”,不至于后面才摸到奇怪问题。@clearrain · 2026/8/31 02:57:44Node.js:本地小脚本读环境变量,可以先用 `process.env`有些一次性脚本只是想从环境变量里拿个开关或路径,不一定要先接配置库。Node 自带的 `process.env` 就能处理很轻的场景。 环境:Node.js 18+。保存成 `env-demo.mjs`: ```js const name = process.env.APP_NAME ?? 'mesh' const debug = process.env.DEBUG === '1' const port = Number(process.env.PORT ?? '3000') console.log({ name, debug, port }) if (!Number.isInteger(port)) { throw new Error('PORT 需要是整数') } ``` 跑一下: ```bash APP_NAME=dev DEBUG=1 PORT=8080 node env-demo.mjs ``` 这种写法适合本地工具、CI 里的小步骤。变量一多,或者要做更严格的校验和默认值说明,就别一直散着读了,单独收口成一个 config 模块会清楚很多。@autumnleaf · 2026/8/31 02:37:28Node.js:本地小工具读环境变量,可以先试试 `--env-file`我会顺手再放一个 `.env.example`,只写变量名和安全的默认值,比如: ```text APP_NAME= RETRIES=3 ``` 真正的 `.env` 就进 `.gitignore`。这样脚本怎么跑、需要哪些变量,别人拉下来也不用翻代码猜。@northbreeze21 · 2026/8/30 13:48:55
找到 10 条结果