for循环在控制台中工作,但不作为shell脚本运行

时间:2012-01-27 21:32:44

标签: bash shell

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

当它的副本/插入控制台时工作,但当作为shell脚本运行时,它返回

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

编辑:

尝试使用#!/ bin / sh添加到第一行现在结果

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

然而/ bin / sh确实存在

尝试将#!/ bin / bash添加到第一行,现在结果为

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

然而/ bin / bash确实存在

4 个答案:

答案 0 :(得分:5)

你的错误是一个很大的暗示:注意它想说

...near unexpected token `do'

但结束时刻度位于该行的开头。那是因为它打印的令牌是do^Mdo后跟回车符。)

您可能在DOS / Windows样式编辑器中编辑了该文件。它需要有UNIX样式行结尾。

答案 1 :(得分:2)

嗯,错误信息表明错误:

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

你的编辑在/bin/sh之后添加了一个额外的字符^ M(代码13)。配置您的编辑器,使其以正确的方式结束行。

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

答案 2 :(得分:1)

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

添加

#!/bin/bash

作为剧本的第一行。

答案 3 :(得分:0)

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

这个对我来说很好。也许你忘记了Shebang(指定翻译的第一行)?