2012-01-27 87 views
2
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

回答

5

你的錯誤是大提示:請注意,它想說

...near unexpected token `do' 

但收盤蜱是在該行的開頭。這是因爲它打印的令牌是do^Mdo後跟回車)。

您可能在DOS/Windows風格的編輯器中編輯過該文件。它需要有UNIX風格的行結尾。

+0

...你可能是對的。我編輯它在我的本地機器上的editplus(Windows XP),然後將其移動到Linux的盒子... – Mechaflash 2012-01-27 21:45:59

0
#!/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

1

如果沒有shebang,您的腳本將由/bin/sh執行。根據系統的不同,sh可能不支持$(...)語法。

添加

#!/bin/bash 

爲腳本的第一行。

+0

在第一行中用#!/ bin/bash更新了我的腳本,並輸出了另一個錯誤 – Mechaflash 2012-01-27 21:43:38

+0

這不是問題,但我會在這裏留下這個答案,因爲它可能幫助其他人 – 2012-01-27 22:05:41

2

那麼,錯誤消息說,什麼是錯的:

/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'< Test.sh > tmp; mv tmp Test.sh; chmod + x Test.sh' – 2012-01-27 22:04:52

相關問題