2012-07-30 67 views
0

我有一個簡單的代碼是:爲什麼不BASH命令在for循環工作

#!/bin/bash 
#LaTex code generator for figures. 
ls *.pdf > pdfs.file 
ls *.ps > ps.file 

pwd=$(pwd) 

for i in {1..2} 
do 
# var=$(awk 'NR==$i' 'pdfs.file') 
echo $pwd 
echo $pwd > testfile 
done 

爲什麼沒有在命令for循環的工作? $ pwd isnt不會回顯是創建的測試文件。

我試過這些命令沒有在終端for循環,他們工作正常。

我的bash的文件是由chmod +x bashfile.sh

做出可執行我所試圖做的是這樣的:

  • 查找PDF或EPS文件和填充pdfs.file和eps.file與它們的文件名。
  • 逐行掃描並抓取這些文件名並追加到$ pwd。
  • 然後將$ pwd $ var附加到latex中的包含圖形命令中。
+0

循環爲我迭代兩次,回顯屏幕和文件(但由於'>'重定向,文件中只有一行)。你運行'bash -x yourscript.sh'時看到了什麼? – 2012-07-30 16:42:34

+0

如果文件不存在,他至少應該看到一些錯誤輸出。 – tvm 2012-07-30 16:46:40

+0

@JonathanLeffler這是我所看到的: \' + LS K2A-FreeBC.pdf K2B-FreeBC.pdf + LS K2A-FreeBC.eps K2B-FreeBC.eps ' – drN 2012-07-30 16:48:42

回答

0

我不知道你做錯了什麼,但能正常工作對我來說:

for i in {1..2}; do 
    echo $PWD 
    echo $PWD > /tmp/testfile 
done 

echo "File contents: $(cat /tmp/testfile)" 

這成功地返回如下:

/tmp目錄
/tmp目錄
文件內容:/ tmp

+0

這很奇怪。你在使用什麼操作系統?這會有所作爲嗎?我在這裏有Ubuntu 11.10。 – drN 2012-07-30 17:04:07

+0

@DNA在Ubuntu 11.10上用Bash 4.2.10測試過,但是在大多數情況下,這應該沒有什麼區別,除非你有一個不解釋範圍運算符的shell。 – 2012-07-30 17:08:52

+0

我試着在頂部(在shebang之後)設置-x,但是沒有任何東西出來。 – drN 2012-07-30 17:10:57

0

您是否使用Windows編輯器編寫了bash文件?也許你有行終止符問題。試試dos2unix bashfile.sh

+0

不,該文件是在Linux的'gedit'中創建的。 – drN 2012-07-30 17:20:58