bash - Basename 最后返回带有附加“\r\r\r”的文件名?
问题描述
我正在尝试编写简单的 shell 脚本,将 github 存储库然后将 CD 克隆到文件夹中。我有
#!/bin/bash
# $1 is github repo url
url=$1
reponame=$(basename $url)
git clone $url
echo $reponame
cd $reponame
现在当我跑
bash deploy_app.sh https://github.com/username/reponame
它回显了正确的 $reponame 但下一行返回此“cd: $'reponame\r\r\r\r': No such file or directory”
我不知道 "\r\r\r\r" 部分来自哪里。它不在回购名称中,当我只是回应它时它不是 $reponame 的一部分。知道为什么会这样吗?
解决方案
我首先要看的是你的脚本本身,通过执行以下操作:
od -xcb deploy_app.sh
并在行尾(或任何行)查找任何回车符(CR, ^M
, \r
, hex0d
或 octal 015
)。cd
那是因为,如果你最后有 CR字符,就会导致这个问题(^M
下面的字符是用 输入的CTRL-VCTRL-M):
pax:~> cd blah^M^M^M^M
-bash: cd: $'blah\r\r\r\r': No such file or directory
如果您的文件中有 CR字符,您可能想要删除它们,并检查您的行尾设置git
(假设该文件在回购中) - 如果您从两者更新您的回购,这通常是由不正确的设置引起的Windows 和 Unix。
如果该文件没有被“损坏” git
,您将需要发现还有什么将这些字符放入其中。
而且,顺便说一句,您实际上不会看到这些字符是否reponame
带有echo
,因为回显它们会产生实际字符,四个“转到行首”字符,然后是“转到下一行“ 特点。因此,如果不通过类似od
.
推荐阅读
- android - Firebase 远程配置服务器值与默认值相同吗?
- java - 如何将迭代计数值设置为java中的一个字段
- java - OperationException[状态{statusCode=PLACES_API_RATE_LIMIT_EXCEEDED,分辨率=null}]
- iis - Vuejs 部署问题:IIS、路由
- javascript - ReactJS:解析csv日期
- python - 如何根据规则提取唯一行?
- unix - awk 用列分隔符写入文件
- python - 如何使用 Python 从网页中提取 td 值?
- python - 在 matplotlib.pyplot 的 x 轴上设置日志间隔
- sql-server - SQL Server Express 2014 - @@version 2008