在shell脚本内的变量中捕获远程命令的输出

时间:2016-03-03 10:15:44

标签: bash ssh

我有一个脚本我想通过ssh在远程运行。它会检查是否有正在运行的进程,并且应该尝试将其终止(如果存在)。现在,我的代码如下所示:

ssh my_prod_env << ENDSSH
...
pid=$(pgrep -f "node my_app.js")
echo $pid
# kill process with $pid
...
exit
ENDSSH

问题在于:我无法在变量中捕获pgrep命令的输出。我尝试使用$(),反引号,管道然后阅读以及其他方法,但都没有成功。

我想在一个ssh会话中完成所有操作。

现在我认为命令输出转到我在脚本中无法访问的输出流。不过我可能错了。 无论哪种方式,帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

好的,在您在评论中提供了更多信息后,我相信这是您问题的正确答案:

ssh my_prod_env -t 'pgrep -f "node my_app.js"'

这将调用该命令并让您登录服务器

答案 1 :(得分:0)

这就是解决问题的方法 - &#34;逃避&#34; ENDSSH标签。

ssh my_prod_env << /ENDSSH
...
# capture output of remote commands in remote variables
...
ENDSSH

问题是我的变量是本地的,我试图捕获远程命令的输出。

这个问题/答案让我意识到发生了什么:How to assign local variable with a remote command result in bash script?

所以,我猜我的问题可能被标记为重复或类似的事情。