我有一个反复发生的问题,第一个for循环(d)没有迭代到它的下一个指示值(1)。关于我做错了什么的任何想法?我已经尝试过使用continue命令来"手动"强制for循环迭代到它的下一个值,但这并没有奏效。本质上,每次运行代码时,它都会完成for循环的(0)迭代,但在终端中停止而不显示任何错误消息。我已经简化了第二个嵌套for循环,因此它只有一个值(0)以便压缩代码。提前谢谢!
<?php
答案 0 :(得分:3)
这个命令可能成为问题吗?
cat > compiledScores$gwasn
这将使您的整个脚本停止,等待输入cat
。
如果脚本挂起,请使用pstree
之类的实用程序查看进程沿袭(从另一个终端,或者在使用Ctrl-Z暂停脚本后,如果可能)。
我的hang.sh
脚本中有什么内容?
$ cat hang.sh
#!/bin/sh
cat
就是这样。让我们运行它,并暂停:
$ ./hang.sh
^Z
[1]+ Stopped ./hang.sh
显示pstree
输出的摘要:
$ pstree | grep hang
| | |-hang.sh---cat
请参阅:hang.sh
正在运行,并且有一个孩子:cat
。
查找脚本挂起位置的另一个工具是使用set -x
打开其跟踪模式。我现在hang.sh
的内容是什么?
$ cat hang.sh
#!/bin/sh
set -x
grep -s foo /dev/null # silent command
cat
grep -s bar /dev/null # silent command
cat
被两个不产生任何输出的无声命令所包围。但是我们在顶部有一个set -x
来启用命令跟踪:
$ ./hang.sh
+ grep -s foo /dev/null
+ cat
啊哈!它执行了第一个grep
,然后卡在cat
中,之后没有达到命令。
答案 1 :(得分:0)
如果d没有迭代到下一个值,可能的问题是你在do
循环的for
部分产生了一个子shell。您可以在调试模式下运行脚本,即
#!/bin/bash -x # x for the debug mode
在您生成子shell时发现
<强>图片的标题说明强>
在
for t in 0
do
#stuff
done
t
只能有一个零值。
另外
if [ $t = 0 ]; then
应该是
if [ $t -eq 0 ]; then # -eq for integers = for strings