【问题标题】:How do I properly add a return character to this script?如何正确地将返回字符添加到此脚本?
【发布时间】:2016-04-21 12:39:18
【问题描述】:

这是我用来“全局”运行 grunt 的脚本。它在 bash shell 中,所以需要更多上下文,所以我想要返回字符,以便在运行 beast watch 时它更“安静”。

beast() {
  cd ~/root_install/grunt
  local a="$1"
  if [ $# -eq 0 ]
  then
     grunt &
  fi
  if [ $# -eq 1 ]
  then
      grunt "$a" &
  fi
  cd ~/root
}

这部分我想要一个返回字符:

  grunt "$a" &

在&之后

【问题讨论】:

  • 使用grunt "$@"要简单得多。

标签: bash gruntjs npm jshint


【解决方案1】:

当你运行 grunt 时,你会得到下面的退出代码之一。

  • 0 - 没有错误!
  • 1 - 致命错误
  • 2 - 缺少 gruntfile 错误
  • 3 - 任务错误
  • 4 - 模板处理错误
  • 5 - 无效的 shell 自动完成规则错误
  • 6 - 警告

您可以像grunt "$a" &>/dev/null 一样抓取它,然后使用$? 选择结果

所以你可以做if [ $? -eq 0 ] 之类的返回码控制。

&>/dev/null这只是2>&1的缩写

它将文件描述符 2 和 1 (STDERR & STDOUT) 重定向到 /dev/null

【讨论】:

  • 什么是&>/dev/null ...你能分解一下吗?
  • 添加了更多解释来回答。
  • 你从来没有提到这是一个返回字符。
【解决方案2】:

当你想做一个返回值时,将返回值$?赋值给它:

   grunt "$a" > grunt.log 2>&1
   returnvalue=$?

您可以将 grunt.log 更改为 /dev/null。 在cd ~/root 之后你可以return ${returnvalue}。 当你想让 grunt 在后台运行时,你可以把这行改成

nohup grunt "$a" > grunt.log 2>&1 &

这会给你一个新的挑战:当后台启动成功并且grunt在2秒内失败时,你的$? returnvalue 不会注意到这一点。
如何处理?
当返回值为 0 时,等待一段时间(20 秒?)并检查日志文件。

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 2011-02-28
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    相关资源
    最近更新 更多