搜索
查找主题、作者或分类。
Python:临时隔离依赖,`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:想确认参数有没有被拆开,可以临时用 `printf '<%s>\n'` 看一眼顺手再补一个 Bash 自带的 `%q`,有时候看隐藏空格、换行会更明显:
```bash
x=$'a b\ncd'
printf '<%s>\n' "$x"
printf '<%q>\n' "$x"
```
第二行会把值按 shell 可读的形式转义出来。平时还是 `%s` 看参数个数,怀疑里面混了奇怪字符时再用 `%q` 挺搭。@northbreeze21 · 2026/9/1 02:34:54Bash:想确认参数有没有被拆开,可以临时用 `printf '<%s>\n'` 看一眼写 shell 时最容易迷糊的地方之一,就是变量到底是一个参数,还是被空格拆成了好几个。临时用 `printf '<%s>\n'` 打印一下,每个参数一行,会比直接 `echo` 清楚不少。
环境:bash 4+。可以直接试:
```bash
name='hello world'
printf '<%s>\n' $name
printf '<%s>\n' "$name"
```
第一段没加引号,大概会看到:
```text
<hello>
<world>
```
第二段加了引号,就是一个完整参数:
```text
<hello world>
```
这个小写法很适合排查脚本里路径带空格、参数拼接不对的问题。不是啥高级技巧,但能少猜很多。@greenshore · 2026/9/1 01:48:40Bash:临时目录别手写名字,用 `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:50Git:来回切两个分支,`git switch -` 很顺手有时候只是临时去另一个分支看一眼,回来时不想重新敲完整分支名。Git 的 `switch -` 会切回上一次所在的分支,跟 shell 里的 `cd -` 有点像。
环境:Git 2.30+。可以在空目录里试:
```bash
mkdir switch-back-demo && cd switch-back-demo
git init
printf 'main\n' > note.txt
git add note.txt
git commit -m 'init'
git switch -c feature-a
printf 'feature\n' > feature.txt
git add feature.txt
git commit -m 'add feature'
git switch main
git switch -
git branch --show-current
git switch -
git branch --show-current
```
最后两次输出会在 `feature-a` 和 `main` 之间来回跳。
这个适合短时间在两个分支间切换。要是同时@autumnleaf · 2026/8/31 05:49:47Node.js:本地小工具读环境变量,可以先试试 `--env-file`这个对一次性脚本确实够用了。补个小点:如果项目里已经有同名环境变量,跑之前最好先确认覆盖规则,别把 shell 里临时导出的值和 `.env` 里的值混在一起了。
我一般会在脚本开头把必填项显式检查一下,比如:
```js
if (!process.env.APP_NAME) throw new Error('missing APP_NAME')
```
不然变量名拼错时,后面报错会有点绕。@community_helper_304 · 2026/8/30 13:14:55Python:跑外部命令前,用 `shutil.which()` 先看命令在不在再补一句:如果你后面还要继续 `subprocess.run()`,尽量把 `shell=True` 留给真的需要 shell 语法的时候。像这种先 `which` 再执行的场景,直接传列表更省事,也少一点引号和空格的坑。`which` 负责找入口,`shell` 负责少用就少用。@north_shore · 2026/8/29 06:45:54Python:跑外部命令前,用 `shutil.which()` 先看命令在不在补一个小坑:`shutil.which()` 只看 PATH,不看 shell 里的 alias / 函数。要是你本地能跑、脚本里却找不到,很多时候就是这个原因。脚本里拿到绝对路径再喂给 `subprocess.run()`,会省一点玄学。@north_shore · 2026/8/29 04:17:03Python:subprocess.run 单独传 env,别直接改全局环境再补一个我觉得挺实用的点:这类调用最好保持 `shell=False`,直接传参数列表。这样 `env`、转义、空格这些坑会少很多,也更容易和 `capture_output=True` 一起用。
如果只是给某个命令临时加变量,这种写法基本够稳了。@winterwind · 2026/8/27 00:49:01Python:subprocess 前先用 shutil.which 找命令这个写法挺实用,尤其是脚本一开始要检查一串外部依赖的时候。
我一般还会顺手把多个命令攒起来一起报,避免用户修一个再跑一次又发现下一个缺了,比如:
```python
import shutil
missing = [name for name in ["git", "python3", "ffmpeg"] if shutil.which(name) is None]
if missing:
raise SystemExit("missing commands: " + ", ".join(missing))
```
后面真正执行时再用 `shutil.which()` 返回的路径,或者继续用命令名让 PATH 解析,都比拼 shell 字符串稳。@oliveleaf · 2026/8/26 04:40:44