`ls*`中i的shell脚本挂起
其中一个夜间进程已开始挂起。它大约一周只发生一次,所以很难追踪这个问题,但我已经缩小了范围,做了一个for循环。即使只是简单地回显文件也不起作用。以下情况导致其挂起:`ls*`中i的shell脚本挂起,shell,for-loop,Shell,For Loop,其中一个夜间进程已开始挂起。它大约一周只发生一次,所以很难追踪这个问题,但我已经缩小了范围,做了一个for循环。即使只是简单地回显文件也不起作用。以下情况导致其挂起: for i in `ls *`;do echo $i;done 鉴于以下情况适用: for i in *;do echo $i;done 这是我们核心流程的一部分,尽管我可以从循环中删除ls,但我想知道为什么会发生这种变化,特别是因为这段代码已经存在多年,没有任何问题。没有太多的文件。昨晚只有9109个,但这是否会超过循环中l
for i in `ls *`;do echo $i;done
鉴于以下情况适用:
for i in *;do echo $i;done
这是我们核心流程的一部分,尽管我可以从循环中删除
ls
,但我想知道为什么会发生这种变化,特别是因为这段代码已经存在多年,没有任何问题。没有太多的文件。昨晚只有9109个,但这是否会超过循环中ls
的某个限制ls
单独工作也很好 ls*
列出任何子目录的内容以及当前目录中的文件。您可能只想要ls
,而不是ls*
,或者甚至只想要*
,因为ls
有些冗余,您发现这是可行的
如果文件名包含空格或其他特殊字符,则还应为文件名添加引号,例如
for i in *;do echo "$i";done
它不能回答你的问题(希望我是在向皈依者宣讲),但绝对没有理由在
*
上使用ls*
,因此无论如何你都应该删除它。这不是一种可能的情况,正如你所示,在地球上循环是正确的方式。关于子目录的观点很好。@TomFenech:true-“可能”现在从答案中删除了。;-)虽然我承认ls*不是一种很好的编码方式,而且确实需要改变,但它并不能回答为什么它现在会崩溃。当前目录中没有子目录,因此其他位置的文件不应影响此操作。您可能需要提供更多详细信息。文件名中是否有空格或特殊字符?您确定没有隐藏的子目录(名称以
开头,例如.git
)吗?目录是否在服务器上?您使用的是什么操作系统?目录中有9109个文件,没有子目录。所有文件的格式完全相同-xxxxxx\u nnnnnnnn\u nnnnnn.dat,其中x为字母,n为数字。没有子目录(即使是隐藏的子目录)。