为什么不';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
可能会有所帮助。祝大家好运。