在变量中收集远程ssh命令的输出

时间:2016-06-30 08:37:32

标签: bash shell scripting

如何在bash脚本中捕获远程命令的输出。 例如

ssh $USERNAME@$SUT<<EOD
COUNT=$(ls -la | wc -l)
EOD

为具有多个此类实例的更大脚本进行规划,我需要存储并使用远程命令输出。

1 个答案:

答案 0 :(得分:2)

应该是:

VAR=$(ssh "$USERNAME"@"$HOST" -- remote_command -option)

您希望远程执行remote_command并将其存储在本地变量中。这就是上面命令的作用。

如果要远程执行多行命令,请使用以下构造和doc:

VAR=$(ssh "$USERNAME"@"$HOST" <<EOF
    remote_command -option
    another_command
    ...
EOF
)

顺便说一句,除非你想将局部变量插入到远程命令中,否则你可能希望使用<<'EOF'作为起始分隔符来禁用本文档中的本地shell扩展(注意'):

VAR=$(ssh "$USERNAME"@"$HOST" <<'EOF'
    remote_command -option
    another_command
    ...
EOF
)

在上面的表单中,您可以在远程脚本中使用shell变量,命令替换等。像这样:

VAR=$(ssh "$USERNAME"@"$HOST" <<'EOF'
    COUNT=$(remote_command -option)
    another_command "${COUNT}"
    if $((COUNT+1)) ; then
        foo -bar
    fi
    ... and so on. all expansions happen remotely
EOF
)