文件嵌入 Shell 脚本
把文件存入 Shell 脚本
在给别人发送自己写的脚本时,需要把其用到的其他文件一并发送过去。这时候就要使用 tar
进行打包。如果能将文件直接嵌入 Shell 脚本中,在第一次运行脚本的时候自动将文件释放出来,就能只发送一个脚本文件,而不再需要打包解包的操作。本文简述如何操作
获取文件的 Base64 编码
何为 Base64 编码
Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。由于 $log_2 64=6$,所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母
A-Z
、a-z
、数字0-9
,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。—— Wikipedia
因为每 3 字节使用了 4 个可打印字符表示,所以导出的 Base64 编码一般都会比原本的文件更大
Shell 获取文件的 Base64编码
1 | base64 -w 0 file > file.bs64 |
-w 0
参数使得该命令的输出不会自动换行,方便在 Shell 脚本中粘贴。
将文件的 Base64 编码保存到文件,方便复制粘贴。(下文假设获取到的 Base64 编码为 XXXX)
将文件的 Base64 编码输入脚本
1 | file_bs64=$(cat << 'EOF' |
至此已经完成了将文件嵌入脚本的操作
运行时解包
检测文件是否存在,如果不存在就将 Base64 解码存入文件
1 | fn=file |