bash - 为什么在此bash脚本中执行顺序相反?

标签 bash ssh execution tail

我有这个脚本:

ssh -T user@$123.456.789.123 <<EOF

    cd www

    var=$(tail index.htm)

    echo $var

EOF

我认为应该做的是:
  • 通过SSH,
  • 连接到服务器
  • 然后转到文件夹www,
  • 然后将index.htm的尾部存储到变量var
  • ,最后回显结果。

  • 相反,似乎tail是在更改文件夹之前执行的,因此找不到index.htm文件。

    我尝试使用不同的命令,并且每次似乎我尝试存储到变量中的命令替换结果在打开SSH连接后,在执行任何其他脚本之前都立即执行。

    我在这里想念什么?

    最佳答案

    在将here文档的内容传递给$(...)之前,将在本地扩展ssh。要将文字文本发送到远程服务器,请引用此处文档定界符。

    ssh -T user@$123.456.789.123 <<'EOF'
        cd www
        var=$(tail index.htm)
        echo "$var"
    EOF
    

    (也请引用$var的扩展名,以保护与 shell 的任何嵌入式间距。)

    关于bash - 为什么在此bash脚本中执行顺序相反?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410743/

    相关文章:

    git - SSHKit::Runner::ExecuteError:在主机 Net::SSH::AuthenticationFailed 上执行时出现异常:身份验证失败

    java - 为使用 JSch 通过 SSH 执行的命令提供输入/子命令

    linux - 需要将程序带到主存中执行吗?

    process - 如何暂停,恢复和停止Sikuli程序?

    linux - ssh 命令不会返回与在 ssh 下执行的命令相同的结果

    linux - ip 规则 : deleting all rules from table

    linux - 使用脚本更改用户 shell?

    bash - 为什么 "docker run"错误与 "no such file or directory"?

    linux - 如何通过 shell 脚本在远程服务器上连接和运行 shell 脚本

    c++ - 纯虚拟和虚拟有什么区别