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

使用IFS=read读取变量作为路径时ln链接创建失败的解决求助

问题解决方案

1. 先修复循环的判断逻辑

你脚本里的|| [ -n "$p" ]是明显错误——$p是未定义的变量,应该改成$bandB,这样才能保证文件最后一行即使没有换行符也能被正确读取:

while IFS= read -r bandB || [ -n "$bandB" ]

2. 给变量加双引号包裹

所有变量引用都用双引号括起来,避免特殊字符、空格导致的解析错误,不管是printf还是ln命令都要做:

printf '%s\n' "$bandA"
printf '%s\n' "$bandB"
ln -sfn "/bst.$bandB.cfg" "/bst.cfg"

3. 处理文件里的隐藏回车符

大概率你的LIST.txt是Windows格式的(带\r回车符),读取到的$bandB会暗藏这个符号,导致实际路径变成/bst.B01\r.cfg,自然找不到文件。

两种解决方式:

  • 先转文件格式:
    dos2unix LIST.txt
    
  • 或者直接在脚本里处理变量:
    bandB=$(echo "$bandB" | tr -d '\r')  # 去掉可能的回车符
    

最终修正后的完整脚本

bandA="B01"
while IFS= read -r bandB || [ -n "$bandB" ]
do
  # 移除可能的Windows回车符
  bandB=$(echo "$bandB" | tr -d '\r')
  printf '%s\n' "$bandA"
  printf '%s\n' "$bandB"
  ln -sfn "/bst.$bandB.cfg" "/bst.cfg"
done < LIST.txt

排查小技巧

如果还是有问题,可以在ln命令前加个echo,打印出实际执行的命令,就能看到路径是否正确:

echo "实际执行:ln -sfn \"/bst.$bandB.cfg\" \"/bst.cfg\""
ln -sfn "/bst.$bandB.cfg" "/bst.cfg"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:07:11