linux - 我运行了一个我创建的 sh 脚本,但它失败了,因为它发现了不在脚本本身中的无效字符
问题描述
我创建了一个 sh 脚本,基本上它的作用是读取一个纯文本文件,其中是我想要发送公钥以连接到它们的服务器的 ip、用户和密码,而不需要密码来解决问题使用 ansible 和 vagrant 实现自动化。
#!/bin/sh
file="$1"
lines=$(cat $file)
file_tr=`cat $file | tr " " ","`
for line in $file_tr
do
ip=`echo $line | cut -d "," -f1`
user=`echo $line | cut -d "," -f2`
pass=`echo $line | cut -d "," -f3`
sshpass -p $pass ssh-copy-id -i ~/.ssh/id_rsa.pub -oStrictHostKeyChecking=no $user@$ip
done
我已经在 Ubuntu 20.04 中使用 Visual Studio 代码完成了这个脚本,并且我在上面运行它没有任何问题,也就是说,它运行良好。
后来我下载了我的存储库,这个脚本在 Windows 10 中,我用 Visual Studio 代码打开了存储库,然后用 Visual Studio 代码打开了一个带有 git bash 的终端,我做了 ssh 到一个 ubuntu 20.04 服务器,自动部署了 vagrant 和在此服务器上的文件夹共享存储库中,我运行了脚本,它检测到脚本本身中不存在的字符。正如我们在这里看到的。
vagrant@server1:~$ sh multi-copy-ssh-public-key.sh hosts0.txt
cat: 'hosts0.txt'$'\r': No such file or directory
cat: 'hosts0.txt'$'\r': No such file or directory
multi-copy-ssh-public-key.sh: 6: Syntax error: word unexpected (expecting "do")
我在带有图形环境的 ubuntu 20.04 上做同样的过程,它没有给我任何错误。给我的这个错误没有任何意义,因为我在我编写的脚本中看不到这些字符。所以请有人向我解释一下,因为我越来越绝望,这是迄今为止我作为一名计算机科学家发生过的最奇怪的事情。
我已经完成了所有操作,例如将脚本复制并粘贴到记事本中,尝试删除一些字符,唯一的解决方案是再次重写脚本,完全相同并且可以正常工作。我只想知道为什么这件奇怪的事情会发生在我身上。
解决方案
推荐阅读
- python - 如何接收来自 HTML 的请求并在我的视图和模型端处理它
- docker - 传递 --env 变量现在可以使用 ENTRYPOINT
- php - 导出 CSV 继续打印 HTML 页面
- c# - 从项目配置中引用解决方案配置
- ios - SAMKeychain 删除所有账户
- c# - 在1gb文件c#中搜索和替换文本的有效方法
- sql - SQL Server Query - 如何逐行转置并将它们堆叠起来?
- java - var/task/org/springframework/cglib/core/NamingPolicy.class(权限被拒绝)”,“errorType”:“java.io.FileNotFoundException”
- java - 未使用 Java 代码段设置 Google Cloud 项目环境变量
- strace - strace 报告 x32 和 64 位模式