for循环工作在控制台,但不跑了作为一个shell脚本

问题描述:

for files in $(find . -maxdepth 1 -type f); do 
    echo $(basename $files) 
done 

作品时,其拷贝/插入到控制台,但是当作为一个shell脚本运行,它返回for循环工作在控制台,但不跑了作为一个shell脚本

'/TEST.sh: line 1: syntax error near unexpected token `do 
'/TEST.sh: line 1: `for files in $(find . -maxdepth 1 -type f); do 

编辑:

尝试2#!/ bin/sh的加入到第一线,现在结果

-bash: /oper/text2pdf_TEST.sh: /bin/sh^M: bad interpreter: No such file or directory 

然而/ bin/sh的确实存在

尝试3#!/斌/庆典加入到第一线,现在结果

-bash: /oper/text2pdf_TEST.sh: /bin/bash^M: bad interpreter: No such file or directory 

但/斌/ bash中确实存在

+2

(回答后):+1包含确切的逐字错误,这是唯一可以正确回答此问题的方法。 – 2012-01-27 21:45:00

你的错误是大提示:请注意,它想说

...near unexpected token `do' 

但收盘蜱是在该行的开头。这是因为它打印的令牌是do^Mdo后跟回车)。

您可能在DOS/Windows风格的编辑器中编辑过该文件。它需要有UNIX风格的行结尾。

+0

...你可能是对的。我编辑它在我的本地机器上的editplus(Windows XP),然后将其移动到Linux的盒子... – Mechaflash 2012-01-27 21:45:59

#!/bin/sh 
for files in $(find . -maxdepth 1 -type f); do 
    echo $(basename $files) 
done 

对我来说这一个正常工作。也许你忘了Shebang(指定解释器的第一行)?

+0

用#!/ bin/sh在第一行更新了我的脚本,并输出了另一个错误 – Mechaflash 2012-01-27 21:44:21

如果没有shebang,您的脚本将由/bin/sh执行。根据系统的不同,sh可能不支持$(...)语法。

添加

#!/bin/bash 

为脚本的第一行。

+0

在第一行中用#!/ bin/bash更新了我的脚本,并输出了另一个错误 – Mechaflash 2012-01-27 21:43:38

+0

这不是问题,但我会在这里留下这个答案,因为它可能帮助其他人 – 2012-01-27 22:05:41

那么,错误消息说,什么是错的:

/bin/sh^M: bad interpreter: No such file or directory 

编辑器/bin/sh后提出一个多余的字符^ M(代码13)。配置您的编辑器,以便以正确的方式结束行。

也可以在操作系统上编辑文件,该文件以CR + LF结束行,然后将其复制到仅使用LF的操作系统。有关此换行符混淆的背景,请参阅this wikipedia article

+0

这在Cygwin上非常常见,Cygwin是一个在Windows之上运行的类Unix仿真层。 'dos2unix'命令会将Windows格式的文本文件(带有CR-LF行结束符)转换为shell所需的Unix样式格式(带有LF行结束符)。仔细阅读手册页;与大多数文本过滤程序不同,'dos2unix'替换了文件。 – 2012-01-27 22:03:03

+0

@凯特汤普森没错。包括就地警告!谢谢! – 2012-01-27 22:04:31

+0

如果你没有'dos2unix',这应该工作:'tr -d'\ r' tmp; mv tmp Test.sh; chmod + x Test.sh' – 2012-01-27 22:04:52