如何在linux上运行命令并将输出保存在变量中

时间:2012-09-03 12:23:54

标签: linux bash jenkins

我使用node.js和mocha插件。 我需要从Jenkins运行测试。

测试目录是'/ home / user / tests' 通过putty,我可以启动命令'make all'来运行测试并获得结果。 如何从bash脚本运行它?

我在文件“start.sh”中创建了脚本:

    #!/bin/bash

    DIR=$(cd /home/user/tests; make all)

    echo "-----------------------START----$stDate--------------------"
    echo $DIR
    echo "------------------------END-----$enDate--------------------"

在这种情况下结果是

    08:10:58  SSH: EXEC: STDOUT/STDERR from command [start.sh] ...
    08:10:59  /bin/sh: mocha: command not found
    08:10:59  /bin/sh: mocha: command not found
    08:10:59  /bin/sh: mocha: command not found
    08:10:59  /bin/sh: line 0: cd: ./messagel: No such file or directory
    08:10:59  -----------------------START----Mon Sep  3 08:11:00 EDT                 2012--------------------
    08:10:59  cd ./tenant; mocha; cd ../; cd ./user; mocha --reporter list; cd ../; cd ./asset; mocha; cd ../; cd ./messagel mocha -t 5000; cd ../;
    08:10:59  ------------------------END-----Mon Sep  3 08:11:00 EDT 2012--------------------
    08:10:59  SSH: EXEC: completed after 401 ms

但是它包含在文件“makefile”中并且不运行 cd ./tenant;摩卡; cd ../; cd ./user;摩卡 - 报告人名单; cd ../; cd ./asset;摩卡; cd ../; cd ./messagel mocha -t 5000; cd ../ ;

2 个答案:

答案 0 :(得分:3)

您的DIR变量仅包含部分输出的事实可能是因为cd /home/user/tests; make all输出到stderr而不是stdout。

尝试:

DIR=$(cd /home/user/tests; make all >& /dev/stdout)

确保捕获DIR变量中的正常输出和错误输出。

另一种可能性是

DIR=$(cd /home/user/tests; make all 2>&1 )
除了它直接操作文件描述符之外,它几乎都是同样的事情。更多信息here

另请注意,这只会重定向make all的输出。换句话说,如果/home/user/tests不存在,$( )

将无法捕获错误消息

答案 1 :(得分:0)

似乎bash脚本使用的用户ID与手动运行时不同; PATH变量的不同值表示从Makefile运行时找不到mochamessagel命令。