我有一个bash脚本来源于另一个文件的内容。其他文件的内容是我想要执行的命令并比较返回值。有些命令有多个命令,用分号(;)或和号(& &)分隔,我似乎无法完成这项工作。在这方面努力,我创建了一些测试脚本,如下所示:BASH带多个命令和可重入的变量
test.conf是文件通过测试
实施例1(本作品)被采购,我的输出是差分2秒
test.conf
CMD[1]="date"
test.sh
. test.conf i=2 echo "$(${CMD[$i]})" sleep 2 echo "$(${CMD[$i]})"
例2(不工作) test.conf(如上相同的脚本)
CMD[1]="date;date"
实施例-3(试过,它不起作用或者) test.conf(同上脚本)
CMD[1]="date && date"
我不t希望我的变量CMD在tick标记内,因为这样,这些命令将在调用源代码时执行,我看不出重新评估该变量的方法。
这个剧本基本上是在通1调用CMD来检查一番,如果传递1,我得到一个错误的读数,我做了一些工作,在脚本来纠正的错误读取和重新执行&重新评估的输出CMD;通过-2。
这里是一个例子。在这里我正在检查SSHD是否在运行。如果我在通过1时评估CMD [1]时没有运行,我将启动它并重新评估CMD [1]。
test.conf
CMD[1]=`pgrep -u root -d , sshd 1>/dev/null; echo $?`
所以,如果我修改为我的测试脚本,然后test.conf变为: 注意:刻度线没有显示出来,但它是我的键盘下面的〜关口的关键。
CMD[1]=`date;date` or `date && date`
我的剧本是这样的(处理刻度线)
. test.conf i=2 echo "${CMD[$i]}" sleep 2 echo "${CMD[$i]}"
我得到尽管延迟2秒打印两次相同的日期/时间。因此,CMD没有得到重新评估。
你的问题是不明确的 - 实际上,我没有看到这个问题。你究竟想要做什么,哪里出错?你的“示例”,“test.conf CMD [1] = pgrep -u”......使得宝贵的意义不大 - “源文件”在哪里?你如何解析参数 - 你看到引号时缺少引号? – 2009-07-13 18:28:33
这是一个测试脚本,而不是实际的。因此,$ i的原因仍然存在(切除 - 过去),这是不明确的。其中x = 0 ... 10的CMD [x]是返回1或0的测试条件;主要是这个过程是否正在运行,与上面给出的pgrep例子类似。除了CMD,我还有一个相应的RESTART [x],在我调用它之后,我重新评估CMD [x]以查看进程是否重新启动。在其他示例中,我正在检查是否存在日志文件。我不想让这些细节讨论这个论坛,但它可能会有帮助。 谢谢! – Eric 2009-07-14 12:16:42