#Bash
共 21 篇文章
Bash 开启 set -e 后计数一次就退出:((count++)) 返回了什么
Bash set -e 下从零开始的后置自增会返回状态1,解释算术值与命令成功的区别,并按用途改成赋值与检查边界。
grep -f 的模式文件含空行,结果匹配全部输入
GNU grep 从模式文件读到空行时,会用空模式匹配全部输入。区分空行、正常末尾 LF 与空文件,过滤模式输入并保留匹配方式和退出状态约定。
Bash local 接收命令输出后,失败状态变成 0
Bash 函数用 local 接收命令替换时,声明成功会覆盖子命令失败状态。分开声明和赋值,立即保存状态,并处理部分输出及调用者的错误传播。
Certbot 按 Ctrl+Z 后报 Another instance of Certbot is already running
Certbot 交互任务按 Ctrl+Z 后仍可能持有目录锁。在原 Bash 中核对停止任务,恢复前台后完成或中止,并避免删除锁文件造成并发写入。
Bash 后台命令失败仍返回成功:无参数 wait 不汇总子进程错误
Bash 开启 set -e,后台任务失败却仍显示成功时,检查是否使用无参数 wait。保存各任务 PID,逐个收集退出状态,并明确剩余任务和副作用。
nohup 把 APP_MODE=test 当作命令,报 No such file or directory
环境赋值放在 nohup 后面会被当作程序名。使用 env 或将赋值放到命令前,区分变量作用范围,并用隔离日志验证传递结果。
find 报 Argument list too long:不要把海量文件展开成搜索起点
缓存清理时 find 尚未启动就报 Argument list too long,改用目录起点与带引号的 -name,并核对深度、隐藏文件、日龄和删除范围。
Bash 管道后的 while read 循环结束后,计数变量仍为 0
Bash 管道右侧的 while 循环通常在子 shell 中执行,计数不会回到外层。用文件重定向或进程替换保留变量,并检查 lastpipe 条件与上游失败处理。
xargs -I 后 du 找不到已有文件:文件名前面的空格被丢掉
带前导空格的文件经 xargs -I 后报 No such file or directory 时,检查名称是否在输入解析阶段被改写,再用 NUL 分隔和 GNU du 单次统计保留路径及总计。
Bash 总是执行已删除的旧路径:清除当前 shell 命令缓存
工具迁移后 Bash 仍执行已删除的旧路径时,检查同一 shell 的 hash 记录和 PATH,定点或整体清除缓存,再排除别名、函数及加载器错误。
Bash printf 打印 -- 时只显示 usage
Bash printf 把首个 -- 作为选项结束标记,后面缺少格式便显示用法。用固定的 %s 格式传递文本,并区分选项分隔、格式解析和是否追加换行。
Bash 脚本给 UID 赋值时报 readonly variable
Bash 的 UID 是只读用户 ID 变量。导入脚本应把业务账户字段改成独立变量名,同步修改引用,并检查实际执行入口。
Bash 变量里的末尾换行消失:双引号挡不住命令替换的删除规则
Bash 使用 $(cat) 后末尾换行消失,双引号只保留已有内容。区分命令替换与字段拆分,使用文件输入或受控哨兵法保留文本末尾字节。
Bash while read 漏掉文件末尾没有换行的最后一条记录
Bash 逐行读取只漏最后一条,常见于文件末尾缺少换行。解释 EOF 状态与变量内容的区别,给出保留残行、空行和空字段的读取方式,以及生成端修正和回退边界。
Bash 比较 08、09 报 value too great for base
Bash 算术把前导零数字解释为八进制。对确定为非负十进制的短字段,先校验内容和长度,再用 10# 转换,避免 010 静默变成 8。
Arch 用户 locale.conf 不生效:核对会话启动时的 LANG
Arch 用户 locale.conf 修改后桌面语言不变时,区分 locale 生成、当前环境和会话启动加载,核对 LANG 优先级及 xrdp 或显示管理器的实际入口。
Bash 开启 pipefail 后,head 取首行使脚本以 141 退出
下游取首行提前关闭管道,上游继续写入可能收到 SIGPIPE;核对各段状态,有限输入改为完整消费,并保留真实错误与取消边界。
sort file > file 后文件变空:重定向先截断了输入
sort file > file 导致输入变空时,先保留现场和备份;改用独立输出,或在普通 GNU sort 模式使用 -o,并核对原地写入风险。
Bash 写了 2>&1 仍漏掉错误日志:重定向顺序相反
Bash 从左向右处理重定向。2>&1 放在输出文件重定向之前,会让错误保留在旧目的地;用两路输出探针核对,并区分覆盖与追加。


