2012-07-30 72 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