搜索
查找主题、作者或分类。
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