Linux跨脚本调用公共函数库的核心是用source(或.)命令导入外部函数文件,使其成为当前shell环境的一部分;需准备纯函数定义的lib.sh文件,目标脚本开头source加载后即可直接调用,注意子shell中函数丢失问题及环境集成方法。

Linux中实现跨脚本调用公共函数库,核心是让多个脚本能“看见并使用”同一组已定义的函数,而不是各自重复写一遍。这靠的是source(或 .)命令导入外部函数文件,本质是把函数定义“读入当前shell环境”,使其成为当前作用域的一部分。
准备一个独立的函数库文件
把常用函数集中写进一个纯文本文件,比如 lib.sh:
- 不加
#!/bin/bash(避免被当作独立脚本执行) - 只写函数定义,例如:
log_info() { echo "[INFO] $1"; }is_root() { [[ $EUID -eq 0 ]]; } - 推荐用
name() { ... }格式,兼容性更好
在目标脚本中导入并调用
在需要使用这些函数的脚本开头,用 source 加载库文件:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 路径要写对:若 lib.sh 和脚本同目录,写
source ./lib.sh - 若放在统一位置如
/usr/local/lib/myfuncs.sh,可写source /usr/local/lib/myfuncs.sh - 导入后,函数就和在本脚本里定义的一样,直接写
log_info "Starting..."即可调用
确保函数在子shell中仍可用
默认情况下,source 只影响当前 shell 进程。如果脚本里用了管道、括号子shell 或后台任务(&),函数会丢失:
- 避免在子shell中直接调用函数;如必须,把函数定义复制进去,或改用
export -f func_name导出函数(仅限 bash) - 更稳妥的做法是:所有逻辑尽量在主脚本流程内完成,减少隐式子shell
- 调试时可用
declare -f func_name检查函数是否已加载
进阶:自动加载与环境集成
想让任意终端会话都能直接用这些函数,可以整合进 shell 初始化文件:
- 把
source /path/to/lib.sh加到~/.bashrc或/etc/profile.d/myfuncs.sh - 执行
source ~/.bashrc生效,之后新开终端也能直接调用函数 - 注意权限:系统级库文件需确保所有用户有读取权限(
chmod 644)










