【问题标题】:Redirecting output of system calls with perl in an initramfs在 initramfs 中使用 perl 重定向系统调用的输出
【发布时间】: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


【解决方案1】:

是不是因为你的/bin/sh真的是/bin/dash?参考文献this discussion on bad-fd-numberthis fix 对使用与 dash 兼容的语法有一些建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多