bash - 简单 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 文件。
有什么想法吗?
谢谢
解决方案
我不知道您是否从上面的评论中清楚您的文件在 MS-DOS 中的每行末尾getmos0.sh
包含\r\n
(回车和换行),而不是\n
像在 Unix 和 Linux 中那样仅包含(换行) .
他们给你的答案就是以此为目标的。\r
在不创建临时文件的情况下从文件中删除所有内容的更短方法tmp
是:
sed -i 's/\r$//' getmos0.sh
推荐阅读
- amazon-web-services - 使用 Lambda 从 CloudTrail API 调用中提取信息
- javascript - 为什么我必须点击网页才能激活 javascript
- php - 它有时会使用 HLS 播放视频。例如,它播放 3 小时。10小时不播放视频
- javascript - 根据条件自动打开模态
- sql - 如何使用 CASCADE DELETE 删除所有租户数据
- python - Python:从排序数组中采样 n 个数字,确保它们彼此尽可能远
- active-directory - 我可以在 LDAP/radius/Tacas/Active Directory 中自定义身份验证吗
- xml - XSL FO 的两列布局流程
- arrays - Modelsim VHDL 数组初始化给出警告 (vcom-1320)
- python - 无法解决 ValueError: 层序贯_1 的输入 0 与层不兼容