在解析(即扩展)通配符时停止Linux shell

时间:2013-01-24 20:52:49

标签: linux shell wildcard

在典型的Linux shell中,您可以使用Ctrl+c来停止执行命令。如果您已启动使用通配符(例如*)的运行来查找具有特定模式的所有文件,并且如果您有许多需要搜索的文件,则shell可能需要相当长的时间才能将通配符扩展为实际的文件名。同时,Ctrl + c不会停止shell。 Shell继续解析通配符。只有在shell解析通配符后,Ctrl + c才会生效,这可能需要相当多的时间。

有没有办法在尝试扩展通配符时停止shell?

这是在GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)上测试的。

2 个答案:

答案 0 :(得分:2)

如果shell似乎花了很长时间来扩展通配符,那么很可能会有其中一个:

  1. 你正在做*/*/*/*/*/*之类的事情 - 解决方案:不要这样做;找到一种方法将你正在做的事情分解成更小的比特,或至少更有效地处理它
  2. 目录中有大量文件 - 解决方案:不要这样做;目录中包含太多文件是许多文件系统上众所周知的性能杀手(尽管有些文件系统处理得比其他文件更好)。
  3. 您的文件系统是网络链接上的网络文件系统(NFS,Samba / CIFS,sshfs等等)有点慢,或者是在像CD / DVD等慢速物理介质上。除了一次匹配较少的文件或等待它们之外,这里做的不多。
  4. 您的文件系统通常速度很快,但它在老化的硬盘驱动器上开始出现读/写错误,导致尝试重新定位扇区,这看起来像是大量的超时。检查系统日志中是否有可怕的磁盘消息,如果是这种情况,请购买新磁盘并将数据移至昨天。
  5. 可能有其他人......
  6. 与此同时,其他建议/评论/答案指出,如果shell出现挂起,则可以杀死它。

答案 1 :(得分:1)

我想你可以杀死这个过程。 Ctrl-z要停止ps aux | grep processname,以获取进程ID,然后kill processid