代码之家  ›  专栏  ›  技术社区  ›  AKS

SSH会话-为什么bash FOR loop甚至不显示值,还使用本地计算机

  •  0
  • AKS  · 技术社区  · 6 年前

    ssh -p 2001 -q root@12.13.14.15 \
      " echo
        echo Now On Target Server, I see
        ls -l /tmp/Folder-1.1.0.1053/*
        for v in A B C ; do
          echo === $v===
        done
        echo
        for f in /tmp/Folder-1.1.0.1053/* ; do
          echo File is == $f
        done
      "
    

    Now On Target Server, I see
    -rw------- 1 root root 159790 Jan 23 17:03 /tmp/Folder-1.1.0.1053/file1-1.8.30.tar.gz
    -rw------- 1 root root 116731 Jan 23 17:03 /tmp/Folder-1.1.0.1053/file2-2.7.49.tar.gz
    === ===
    === ===
    === ===
    
    File is ==
    File is ==
    

    我有几个问题:

    1. for 循环打印变量的值 $v
    2. 为什么(当我看到目标服务器在 /tmp/<folder> )第二个 对于 循环未打印 $f 变量?
    3. 我怎么才能得到第二个呢 循环打印两个 .tar.gz 文件夹?
    4. $(...) 或者使用反引号来包装输入值(例如 对于 对于 循环但没有效果。因为某种原因,它期待着那些 *

    如果相关的话,我的Bash版本是“GNU Bash,version 4.1.2(1)-release(x86_64-redhat-linux-GNU)”,我的linux版本是“Red Hat Enterprise linux Server release 6.9(Santiago)”。

    1 回复  |  直到 6 年前
        1
  •  2
  •   AKS    6 年前

    因为您用双引号包装ssh命令,所以 $ $ 西格尔。

    前任:

    ssh -p 2001 -q root@12.13.14.15 "echo; echo Now On Target Server, I see; ls -l /tmp/Folder-1.1.0.1053/*; for v in A B C; do echo === \$v===; done; echo; for f in /tmp/Folder-1.1.0.1053/*; do echo File is == \$f; done"
    

    ssh -p 2001 -q root@12.13.14.15 'echo; echo Now On Target Server, I see; ls -l /tmp/Folder-1.1.0.1053/*; for v in A B C; do echo === $v===; done; echo; for f in /tmp/Folder-1.1.0.1053/*; do echo File is == $f; done'
    

    for 或者SSH会话内部的任何地方。做 不是 转义在脚本中定义的、在SSH会话之外的变量,例如:中的命令/输入部分中使用的 对于 for v in ${staging_area}/*.tar.gz; do echo ==\$v;done" \$v 但没有逃脱 ${staging_area}