【问题标题】:Removing files - Silent failure issue删除文件 - 静默失败问题
【发布时间】:2013-06-13 12:49:46
【问题描述】:

在 Unix 环境中,我有一个删除一些文件的 bash 脚本:

rm -f foo bar* baz*

我的问题:通配符并不总是返回任何结果。因此,我什至无法删除始终存在的“foo”。写入的输出是“rm: No match”。

一个简单的解决方法是拆分命令:

rm -f foo
rm -f bar*
rm -f baz*

但这是一个糟糕的解决方案。

【问题讨论】:

  • 不确定您使用的是什么环境。在我的情况下(Linux/Bash/GNU-tools),它工作得很好:depesz.privatepaste.com/d0b88c536f
  • 为什么这么糟糕?另外,您的第一个解决方案在我的系统上运行良好......如果 bar* 或 baz* 不存在,您将收到错误消息,这是预期的行为。
  • 我的环境是SunOS。你的确切例子对我不起作用。这很糟糕,因为我希望所有文件都消失。如果有些人一开始不存在,那应该没关系。我知道这可能是“rm”的预期行为。那么有没有其他命令可以简单地做到这一点?
  • 如果你只是想让它们不再存在,不管它们当前是否存在,尝试rm -f foo bar* baz* 2>> /dev/null忽略警告信息...
  • 我不关心消息,只关心连'foo'都无法删除

标签: unix wildcard tcsh rm


【解决方案1】:

不,它应该工作。使用哪个外壳? rm 是内部版本还是外部版本? (尝试/bin/rm 以确保外部版本)。在这种情况下,您可能设置了一些阻止您执行命令的 shell 选项(这可能取决于您的 shell)。

【讨论】:

  • 我正在使用 tcsh。我肯定在使用 /bin/rm。在哪里可以查看这些 shell 选项?
  • 好的,我试过了,当foo 是一个目录时,我得到了同样的信息。是你吗?似乎是tcsh glob 的问题。尝试另一个外壳。我还在看tcsh 选项...
  • 知道了!使用nonomatch 选项。 set nonomatch 可以工作,它是一个环境变量,tcsh 使用它来防止扩展是unmatched 正则表达式的情况。
  • 呃。你为什么在一个 tcsh 问题上设置 bash 标签。它们非常不同。 +1 @Jean-BaptisteYunès
  • 好吧,我不知道这很重要.. :P 感谢 Jean-Baptiste,它成功了!也许编辑您的答案以便我接受?
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 2017-01-10
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多