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

1 bash shell scripting

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

ssh $USERNAME@$SUT<<EOD
COUNT=$(ls -la | wc -l)
EOD
Run Code Online (Sandbox Code Playgroud)

将此计划用于具有多个此类实例的较大脚本,我需要在其中存储和使用远程命令输出。

hek*_*mgl 5

它应该是:

VAR=$(ssh "$USERNAME"@"$HOST" -- remote_command -option)
Run Code Online (Sandbox Code Playgroud)

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

如果您想远程执行多行命令,请使用以下构造和此处的文档:

VAR=$(ssh "$USERNAME"@"$HOST" <<EOF
    remote_command -option
    another_command
    ...
EOF
)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,除非您想将本地变量插入远程命令中,否则您可能希望在此处文档中使用<<'EOF'作为开始分隔符来停用本地 shell 扩展(请注意'):

VAR=$(ssh "$USERNAME"@"$HOST" <<'EOF'
    remote_command -option
    another_command
    ...
EOF
)
Run Code Online (Sandbox Code Playgroud)

在上面的形式中,您可以在远程脚本中使用 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
)
Run Code Online (Sandbox Code Playgroud)