为什么不';t用于循环工作的BASH命令

为什么不';t用于循环工作的BASH命令,bash,for-loop,Bash,For Loop,我有一个简单的代码: #!/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没有回显,testfile也没有创

我有一个简单的代码:

#!/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没有回显,testfile也没有创建

我在终端中没有for循环的情况下尝试了这些命令,它们工作得很好

通过
chmod+xbashfile.sh

我想做的是:

  • 查找PDF或eps文件,并用其文件名填充pdfs.file和eps.file
  • 逐行浏览并获取这些文件名并附加到$pwd
  • 然后将$pwd$var附加到latex中的include graphics命令

    • 我不确定你做错了什么,但这对我来说很好:

      for i in {1..2}; do
          echo $PWD
          echo $PWD > /tmp/testfile
      done
      
      echo "File contents: $(cat /tmp/testfile)"
      
      此操作将成功返回以下内容:

      /tmp
      /tmp
      文件内容:/tmp


      您是否使用Windows编辑器编写bash文件?也许你对线路终端有问题。请尝试
      dos2unix bashfile.sh

      循环对我重复了两次,回显到屏幕和文件(尽管由于
      重定向,文件中只有一行)。运行
      bash-x yourscript.sh时您会看到什么?如果文件不存在,他至少会看到一些错误输出。@JonathanLeffler这就是我看到的:`+ls k2a-FreeBC.pdf k2b-FreeBC.pdf+ls k2a-FreeBC.eps k2b-FreeBC.eps`那么我认为您没有向我们展示您正在执行的脚本。您至少应该看到变量
      pwd
      的赋值。您的文件按原样为我工作。在我的回答中,我提供了另一种结构来简化问题,但你还有其他一些戏剧性的事情在进行:隐藏的角色,你没有显示的命令,等等。尝试在脚本顶部附近添加
      set-x
      ,看看shell是如何评估命令的。这很奇怪。你在用什么操作系统?那会有区别吗?我这里有Ubuntu11.10。@DNA在Ubuntu11.10和Bash4.2.10上进行了测试,但在大多数情况下应该没有区别,除非你有一个外壳不解释范围运算符。我在顶部尝试了
      set-x
      (在shebang之后)我复制了文件的内容,并在终端上试用,效果很好。。给出了什么?您是否使用Windows编辑器创建了脚本?脚本是否有\r\n行结尾
      dos2unix myScript
      可能会有所帮助。祝大家好运。