首页 > 解决方案 > 简单 bash 脚本中的错误

问题描述

所以我有一个在我的 pi 上运行的小型 bash 脚本,但由于某种原因正在排除朋友 pi 上的错误。

最终目标是要下载并重命名以供另一个脚本使用的文件。这种情况每天发生 4 次,因此部分脚本会在开始之前删除前一个文件。然后它会下载新文件,然后重命名它,以便其他脚本可以引用一个文件,而不是全天下载的所有四个文件。

这是脚本。

#!/bin/bash

rm -r /NeoSectional/GFSMAV &
sudo wget https://www.weather.gov/source/mdl/MOS/GFSMAV.t00z -P /NeoSectional/
sleep 5
sudo mv /NeoSectional/GFSMAV.t00z /NeoSectional/GFSMAV

所以它应该删除文件 GFSMAV

然后下载新文件 GFSMAV.t00z 并将其放入 NeoSectional 目录

等待五秒钟

然后将名称从 GFSMAV.t00z 更改为 GFSMAV

这是我在朋友 pi 上得到的输出。

getmos0.sh: line 2: $'\r': command not found
getmos0.sh: line 3: $'\r': command not found
--2020-04-22 11:50:03--  https://www.weather.gov/source/mdl/MOS/GFSMAV.t18z
Resolving www.weather.gov (www.weather.gov)... 23.1.244.20, 2600:1406:3c:498::116,     2600:1406:3c:497::116
Connecting to www.weather.gov (www.weather.gov)|23.1.244.20|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3198792 (3.0M) [text/plain]
Saving to: ‘/NeoSectional/\r/GFSMAV.t18z.1’

GFSMAV.t18z.1                     100%   [============================================================>]   3.05M  1.72MB/s    in 1.8s    

2020-04-22 11:50:05 (1.72 MB/s) - ‘/NeoSectional/\r/GFSMAV.t18z.1’ saved [3198792/3198792]

sleep: invalid time interval ‘5\r’
Try 'sleep --help' for more information.
mv: cannot stat '/NeoSectional/GFSMAV.t18z': No such file or directory

由于某种原因,它最终创建了一个名为 ''$'\r' 的目录

此外,它在删除文件时出错,它试图将文件放在 /NeoSectinoal/\r/ 中,然后因为它把它放在那个奇怪的目录中,所以它最后是 mv。

我们有 chmod +x bash 文件。

有什么想法吗?

谢谢

标签: bashraspberry-pi

解决方案


我不知道您是否从上面的评论中清楚您的文件在 MS-DOS 中的每行末尾getmos0.sh包含\r\n(回车和换行),而不是\n像在 Unix 和 Linux 中那样仅包含(换行) .

他们给你的答案就是以此为目标的。\r在不创建临时文件的情况下从文件中删除所有内容的更短方法tmp是:

sed -i 's/\r$//' getmos0.sh

推荐阅读