我有一个简单的脚本,它使用 curl 获取一些纯文本文件,并将其分配给变量;稍后它会回显它并将其 grep 用于某些行,将它们放入一个临时文件中(我实际上想将它们放入一个数组中);然后遍历它们并做一些事情。我在 Mac OS X 上的一台机器上运行它,它大部分都可以工作。但是,随机会发生以下任一情况:
- curl 输出被视为单行,因此在 echo/grep 阶段,事情会中断;
- 整个 tmp 文件在执行 echo 和 for 循环时被视为单行(我似乎已经使用“读取行”缓解了这种情况),所以它再次中断。
有没有办法确保换行符得到一致的处理,一劳永逸?我什至不在乎只要它始终相同,如果需要,我也可以从单行 curl 输出中提取结果。
更新:来自不同的地方。登录机器,做了一些事情,发现脚本不起作用。运行一些命令(结果,删节,下面)进行测试,注销,重新登录,行为改变(回到预期的)。注意 for 循环输出之间的区别...... curl 输出对我来说也是如此,其中完全相同的命令(据我所知)完全相同的 env 以不同的方式处理换行符。我想做的是在每个脚本的开头运行一些命令,使其 100% 确保行为永远不会改变。
[root@ip-xxx-xxx-xxx-xxx ~]# cat example.txt
ip-xxx-xxx-xxx-xxx.ec2.internal
ip-xxx-xxx-xxx-xxx.ec2.internal
[root@ip-xxx-xxx-xxx-xxx ~]# for f in `cat example.txt`; do echo "line $f"; done
line ip-xxx-xxx-xxx-xxx.ec2.internal
ip-xxx-xxx-xxx-xxx.ec2.internal
[root@ip-xxx-xxx-xxx-xxx ~]# while read f; do echo "line $f"; done < "example.txt"
line ip-xxx-xxx-xxx-xxx.ec2.internal
line ip-xxx-xxx-xxx-xxx.ec2.internal
[root@ip-xxx-xxx-xxx-xxx ~]# logout
Connection to ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com closed.
reznor-mbp:trunk2 sergey$ ssh -i ... "root@..."
Last login: ...
[root@ip-xxx-xxx-xxx-xxx ~]# for f in `cat example.txt`; do echo "line $f"; done
line ip-xxx-xxx-xxx-xxx.ec2.internal
line ip-xxx-xxx-xxx-xxx.ec2.internal