【问题标题】:running nohup command on script that takes all parameters在接受所有参数的脚本上运行 nohup 命令
【发布时间】:2011-11-16 14:06:20
【问题描述】:

我正在尝试使用 nohup 运行脚本,但该命令恰好需要 带有变量 $* 的整行参数。我尝试运行这样的命令:

    nohup time ./build_all all &

但这在 nohup.out 中给了我以下错误:

./build_all: DISPLAY=ted:0.0: is not an identifier

任何帮助表示赞赏。

泰德

================================================ ====================================

我意识到 Peter John Acklam 是对的。错误不是因为 nohup,而是因为脚本,我不确定我做错了什么,因为语法对我来说似乎是正确的。奇怪的是,当我自己运行脚本时,我没有看到错误,但是当我尝试使用 nohup 运行时,我看到了奇怪的错误。

总之,脚本的开头是这样的:

#!/bin/bash

export DISPLAY=ted:0.0 # sets the display
export RELEASE=v1.0

node=`uname -n`

【问题讨论】:

    标签: bash nohup


    【解决方案1】:

    只需将“build_all”的参数放在命令行上,就像任何其他命令一样:

    nohup time ./build_all args to build_all go here &
    

    并且参数将被传递给“build_all”,而不是“time”或“nohup”。 & 符号将被 shell 正确解释,并且不会作为参数传递给任何命令。

    【讨论】:

    • 这很奇怪,当我尝试它时似乎不起作用。错误可能在其他地方。
    • 我按照你的建议做了,但实际上我在 DISPLAY 变量中遇到了一个奇怪的错误
    • “DISPLAY”变量错误是由于“build_all”中的语法错误,与“nohup”或“time”无关。也许您可以在“build_all”中显示包含字符串“DISPLAY=ted:0.0”的行?
    • 看起来像这样:#!/bin/bash export DISPLAY=ted:0.0 # 设置显示 export RELEASE=v1.0 node_name=uname -n
    • 出现错误是因为您在 bash 需要标识符的地方使用“DISPLAY=ted:0.0”,即可以用作变量、函数等名称的东西。语法在上面的代码中很好。我怀疑错误在您的脚本中的某个位置。
    【解决方案2】:

    脚本参数(parameters)只是跟在脚本的名字之后,在&符号之前。

    【讨论】:

      猜你喜欢
      • 2012-04-11
      • 2012-10-07
      • 1970-01-01
      • 2011-03-06
      • 2011-09-07
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多