【问题标题】:How to add condition before reboot Linux machine [duplicate]如何在重启Linux机器之前添加条件[重复]
【发布时间】:2018-01-30 12:16:01
【问题描述】:

我们想在init 6生效之前添加一些重要的测试(在redhat上)

如下

我们在 /root/.bashrc 中添加函数(init)

init () {
    /home/sanity.sh
    [[ $? –eq 0 ]] && echo "reboot will performed" || 
         echo "reboot will not performed because sanity.sh exit with error" && exit 1
    Sleep 1
    init $@    
}

但是由于一些不清楚的原因 init 6 没有执行

我的函数出了什么问题?

Goal - 在 init 6 命令之前,我们想从 /home/sanity.sh 获取状态 脚本

如果 status 为 0 则 init 6 将完成,如果不是则 init 6 将不允许!

【问题讨论】:

  • 这个函数无限循环,你怎么知道没有被调用
  • 函数被调用但重启没有完成,所以中间的东西不像预期的那样
  • init () -> 为什么不给函数取一个更合理的名字呢?这将与init - 服务管理器冲突。作为旁注双引号$@
  • 因为用户需要使用“init 6”命令,而当我们使用init函数时,函数init会采取行动而不是真正的init CLI

标签: linux bash alias redhat


【解决方案1】:

如果你的测试被重写以打印它的作用,而不是做它,首先通过:

~$> x=0
~$> [[ $x -eq 0 ]] && echo "pass1" || echo "fail1" && echo "exit"
pass1
exit

然后失败:

~$> x=1
~$> [[ $x -eq 0 ]] && echo "pass1" || echo "fail1" && echo "exit"
fail1
exit

所以您需要在|| 之后对所有内容进行分组,因此只有在test 失败时才会执行exit

~$> x=0
~$> [[ $x -eq 0 ]] && echo "pass1" || { echo "fail1" && echo "exit"; }
pass1

那么你需要使用command来实际调用init

命令实用程序应使 shell 将参数视为简单命令,抑制第 2.9.1.1 节,命令搜索和执行,第 1b 项中描述的 shell 函数查找。

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 2014-11-16
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    相关资源
    最近更新 更多