You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash循环在单台主机向变量插入特殊字符,另一主机运行正常

问题排查:NetApp LIF创建时端口参数带回车符导致失败

问题现象

脚本在一台主机上执行时,-home-port参数对应的$port变量被附加了\r回车符(调试输出显示为$'a0c-56\r'),导致NetApp返回"invalid port"错误;但相同脚本在另一台主机上运行完全正常,已对比两台主机root环境未发现明显差异。

相关脚本代码

while read -r vserverdrt lif ip mask port
do
    echo "$vserverdrt  $lif  $ip  $mask  $port"
    echo
    ssh -n root@NETAPP net interface create -vserver $vserverdrt -lif $lif -service-policy default-data-files -address $ip -netmask $mask -home-port $port -home-node NETAPP-02 -status-admin up
done < /drtest/netapp/files/vservnetdrt.txt

脚本调试输出(启用-x参数)

+ read -r vserverdrt lif ip mask port
' echo 'lebdrtestsvm1-drt  LIF_lebdrtestsvm1-drt_56  10.254.56.69  255.255.255.0  a0c-56
lebdrtestsvm1-drt  LIF_lebdrtestsvm1-drt_56  10.254.56.69  255.255.255.0  a0c-56
+ echo

+ ssh -n root@NETAPP net interface create -vserver lebdrtestsvm1-drt -lif LIF_lebdrtestsvm1-drt_56 -service-policy default-data-files -address 10.254.56.69 -netmask 255.255.255.0 -home-port $'a0c-56\r' -home-node NETAPP-02 -status-admin up

Last login time: 1/17/2025 15:38:10
  (network interface create)

 is an invalid port on node NETAPP-02.

排查方向

  • 检查输入文件格式:执行cat -A /drtest/netapp/files/vservnetdrt.txt,查看每行结尾是否有^M(对应Windows CRLF换行符)。问题主机的输入文件大概率是Windows格式,而正常主机是Unix LF格式。
  • 对比bash版本:两台主机执行bash --version,确认bash版本是否一致,不同版本对read命令处理换行符的逻辑可能存在差异。
  • 验证IFS环境变量:执行echo "$IFS" | cat -A,检查是否包含\r或其他异常分隔符,这会影响read命令的字段拆分行为。
  • 临时转换文件格式:用dos2unix /drtest/netapp/files/vservnetdrt.txt将文件转为Unix格式后重新执行脚本,验证是否解决问题。
  • 脚本内添加字符清理:在使用$port前添加port=${port%$'\r'},强制移除末尾的回车符,绕过环境差异导致的问题。

内容的提问来源于stack exchange,提问作者Bob Moore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:32:17