FreeBSD 13.2下Bash脚本创建ZFS快照时出现字符错误
FreeBSD 13.2下Bash脚本创建ZFS快照时出现字符错误
看起来你遇到的问题大概率是脚本里存在不可见的特殊字符或者格式问题导致的——毕竟直接写死字符串能正常执行,用变量就报错,我给你几个实用的排查和解决方向:
检查脚本的换行格式:如果你的脚本是在Windows环境下编辑的,很可能会带有Windows风格的CRLF换行符(Unix系统用LF),这些隐藏的
\r字符会让shell解析命令时出现奇怪的错误。你可以用cat -v your_script.sh命令查看脚本内容,如果看到行尾有^M符号,就说明是这个问题。解决方法是用dos2unix your_script.sh转换格式(如果没装dos2unix,也可以用sed -i '' 's/\r$//' your_script.sh来移除换行符里的\r)。检查变量赋值的隐藏字符:变量
name="17102023_1234"这一行可能末尾不小心带了空格或者其他控制字符,你可以在脚本里加一行echo "|$name|",执行后看输出的变量前后有没有多余的字符(比如|17102023_1234 |),如果有的话,重新编辑这一行,确保赋值语句干净无多余内容。给快照名加双引号包裹:试试把zfs命令改成这样:
zfs snapshot "data/library@$name"用双引号把整个快照名称括起来,让shell把它当作一个完整的参数解析,避免特殊字符导致的拆分问题。
另外你可以先在终端里手动执行测试命令:
name="17102023_1234"; zfs snapshot data/library@$name
如果这个能成功,那基本可以确定是脚本本身的格式问题,重点排查前面说的换行符和隐藏字符就好。
备注:内容来源于stack exchange,提问作者Charles Kwon
相关产品推荐
相关产品推荐

