【问题标题】:kpartx in a bash loopbash 循环中的 kpartx
【发布时间】:2011-08-27 23:13:01
【问题描述】:

我正在尝试在 bash 脚本中执行以下几行:

for i in `ls  /dev/kvm-space/*-backup`
do 
 kpartx -dv "$i"
done

但脚本没有按预期工作。输出如下:

failed to stat() /dev/kvm-space/sp-test.disk-backup
failed to stat() /dev/kvm-space/sp-web.disk-backup
failed to stat() /dev/kvm-space/tp-web.disk-backup

当我尝试使用上述输出中的路径手动执行 kpartx 命令时,kpartx 会按预期工作。

有人知道出了什么问题吗?

最好的问候 托马斯

编辑: 我正在使用 Debian Squeeze 和通过 apt 提供的 kpartx 版本 0.4.8。

【问题讨论】:

  • 考虑到您的代码,这似乎不太可能,但请检查您的 .bashrc 以获取 kpartx 运行所需的别名或函数之类的任何内容。这些东西在脚本中不可用。
  • 错误信息没有应有的帮助;它告诉我们问题发生在程序使用stat() 系统调用时,但它没有指出失败的原因——或者遇到问题的命令的名称。 (您甚至可以将其作为错误报告给kpartx 开发人员。)所有常见的解释(权限问题等)都无法满足;如果外壳程序和ls 设法生成文件名,那么kpartx 没有理由也不能访问该文件,特别是因为您说它在手动运行时有效。你是用root 运行的吗?
  • 请注意ls 是多余的;您可以简单地使用for i in /dev/kvm-space/*-backup,而不会出现任何(额外)问题。您还没有修改 IFS 变量,是吗?
  • 谢谢,乔纳森,你没有 ls 命令的提示很棒。循环for i in /dev/kvm-space/*-backup 工作得很好,但实际上这并不是真正的解决方案。此外,我不知道为什么带有 ls 的循环不起作用。
  • @ding280:您是说在删除不必要的ls 调用后它可以工作吗?仅供参考,不建议对ls 的输出做任何事情(除了用你的眼球阅读它)。

标签: bash debian


【解决方案1】:

考虑使用以下技术隔离问题:

for i in `ls  /dev/kvm-space/*-backup`
do 
    echo kpartx -dv "$i"
done

如果您的输出与您期望 Bash 为您调用的内容相匹配,那么问题就出在 kpartx 上。我怀疑确实如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多