【发布时间】:2010-11-10 09:47:52
【问题描述】:
我有一个从另一个文件获取内容的 bash 脚本。另一个文件的内容是我想执行并比较返回值的命令。一些命令有多个命令,由分号 (;) 或与号 (&&) 分隔,我似乎无法完成这项工作。为此,我创建了一些测试脚本,如下所示:
test.conf 是测试源文件
Example-1(这个可行),我的输出相差 2 秒
test.conf
CMD[1]="日期"test.sh
.测试.conf 我=2 回声“$(${CMD[$i]})” 睡觉 2 回声“$(${CMD[$i]})”示例 2(这不起作用) test.conf(与上面相同的脚本)
CMD[1]="日期;日期"Example-3(试过这个,它也不起作用) test.conf(与上面相同的脚本)
CMD[1]="日期 && 日期"我不希望我的变量 CMD 位于刻度线内,因为那样的话,命令将在调用源时执行,而且我看不到重新评估变量的方法。
这个脚本本质上是在 pass-1 上调用 CMD 来检查某些东西,如果在 pass-1 上我得到一个错误的读数,我会在脚本中做一些工作来纠正错误的读数并重新执行和重新评估输出指令;第 2 次。
这是一个例子。在这里,我正在检查 SSHD 是否正在运行。如果我在 pass-1 上评估 CMD[1] 时它没有运行,我将启动它并重新评估 CMD[1]。
test.conf
CMD[1]=`pgrep -u root -d , sshd 1>/dev/null;回声$?`所以如果我为我的测试脚本修改这个,那么 test.conf 变成: 注意:刻度线没有显示,但它是我键盘上 ~ 标记下方的键。
CMD[1]=`date;date` 或 `date && date`我的脚本看起来像这样(处理刻度线)
.测试.conf 我=2 回声“${CMD[$i]}” 睡觉 2 回声“${CMD[$i]}”尽管延迟了 2 秒,但我还是打印了两次相同的日期/时间。因此,CMD 没有得到重新评估。
【问题讨论】:
-
您的问题不清楚 - 实际上,我没有看到问题。你到底想做什么,哪里出了问题?您的“示例”、“test.conf CMD[1]=pgrep -u”... 没有什么意义——“源文件”在哪里?你是如何解析参数的——我看到的你缺少引号?
-
这是一个测试脚本,不是实际的。因此 $i 仍然存在的原因(cut -n- past)并且缺乏清晰度。 CMD[x] 其中 x = 0 ... 10 是返回 1 或 0 的测试条件;主要是进程是否运行,类似于上面给出的 pgrep 示例。除了 CMD,我还调用了相应的 RESTART[x],在调用它之后,我重新评估 CMD[x] 以查看进程是否重新启动。在其他示例中,我正在检查是否存在日志文件。我不想用这些细节让论坛无聊,但它可能会有所帮助。谢谢!