【发布时间】:2011-09-04 12:06:32
【问题描述】:
我已经搜索了几个小时来寻找这个看似简单得令人沮丧的问题的答案......
我有一个 bash 脚本,我已对其进行了简化,以找到阻止它工作的行并留下:
#!/bin/bash
#
sed -i -e "s/<link>/\n/g" /usb/lenny/rss/tmp/rss.tmp
如果我运行这个脚本,文件 rss.tmp 不会发生任何事情 - 但如果我从终端调用这个完全相同的 sed 命令,它会按预期进行所有替换。
有人知道我在这里做错了什么吗?
【问题讨论】:
-
我假设 bash 是你的交互式 shell,PATH 是相同的(所以你运行的是相同的
sed),等等?这个脚本对我来说很好...... -
抱歉,我不确定如何检查 bash 是否是我的交互式 shell 或者 PATH 是否相同...应该承认这是我第一次尝试使用非常新的 sh 脚本这一切
-
最后一个想法是使用
#!/bin/sh -x或#!/bin/bash -x告诉shell 打印它正在执行的字符...嘿,我刚刚有了一个想法。您是否可能混淆了回车符和换行符,以至于注释开头的“#”也在消耗您的命令? -
尼莫,这与回车有关,所以感谢您指出我的方向!我一直在 Windows 下使用记事本++ 来编辑脚本,当我查看所有字符时,回车符都显示为
cr/lf,所以我使用VI全部更改了它们,脚本现在按预期工作:) -
dos 格式,@Nemo 很聪明。下次你可以转换格式,dos2unix左右