【发布时间】:2011-09-12 21:06:52
【问题描述】:
我有这个与 initramfs 一起运行的 perl 脚本。我遇到了一堆我不明白的小问题,这些问题肯定与外壳有关。我要问的具体是这样的:
system("/sbin/e2fsck -f $dev");
system("/sbin/e2fsck -f $dev >/dev/null");
重定向到 /dev/null 失败。最终,我想获取输出:
open IN, "/sbin/e2fsck -f $dev |";
但这也失败了。
答案如下: e2fsck 需要一个终端进行交互式修复。传递 -y 标志解决了这个问题。谢谢。
【问题讨论】:
-
第二个
system()调用如何失败?另外,open IN,...语句是否有效? -
假设
$dev的值为“简单”,第一个不涉及shell,第二个涉及。这可能会影响$?的值,并且可能会影响显示的错误消息,但我看不出它是如何使两者之一失败的。 -
对于
system的两次调用: 1) 如果有的话,你看到了什么错误信息? 2) 通话后的$?是什么? 3) 如果$?是-1,那么在通话后立即$!是什么? -
最后,如果你不打算使用它,为什么还要关心让它工作呢?
-
你真正想做什么?运行命令并捕获其输出?
标签: linux perl system io-redirection