【发布时间】: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的输出做任何事情(除了用你的眼球阅读它)。