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中确实存在
你的错误是大提示:请注意,它想说
...near unexpected token `do'
但收盘蜱是在该行的开头。这是因为它打印的令牌是do^M
(do
后跟回车)。
您可能在DOS/Windows风格的编辑器中编辑过该文件。它需要有UNIX风格的行结尾。
...你可能是对的。我编辑它在我的本地机器上的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(指定解释器的第一行)?
用#!/ bin/sh在第一行更新了我的脚本,并输出了另一个错误 – Mechaflash 2012-01-27 21:44:21
如果没有shebang,您的脚本将由/bin/sh
执行。根据系统的不同,sh
可能不支持$(...)
语法。
添加
#!/bin/bash
为脚本的第一行。
在第一行中用#!/ bin/bash更新了我的脚本,并输出了另一个错误 – Mechaflash 2012-01-27 21:43:38
这不是问题,但我会在这里留下这个答案,因为它可能帮助其他人 – 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。
这在Cygwin上非常常见,Cygwin是一个在Windows之上运行的类Unix仿真层。 'dos2unix'命令会将Windows格式的文本文件(带有CR-LF行结束符)转换为shell所需的Unix样式格式(带有LF行结束符)。仔细阅读手册页;与大多数文本过滤程序不同,'dos2unix'替换了文件。 – 2012-01-27 22:03:03
@凯特汤普森没错。包括就地警告!谢谢! – 2012-01-27 22:04:31
如果你没有'dos2unix',这应该工作:'tr -d'\ r' tmp; mv tmp Test.sh; chmod + x Test.sh' – 2012-01-27 22:04:52
(回答后):+1包含确切的逐字错误,这是唯一可以正确回答此问题的方法。 – 2012-01-27 21:45:00