V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
itertools
V2EX  ›  问与答

请教一个 shell 相关的问题

  •  
  •   itertools · 2018-10-26 10:41:04 +08:00 · 1013 次点击
    这是一个创建于 1999 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #!/bin/bash
    
    tag_name=$(date "+%Y_%m_%d")
    image_name=$tag_name:$4
    
    ssh -p $3 $1@$2 << "EOF"
    
    echo "$1"		#1
    echo "$2"	    #2
    
    echo "tag_name:"$tag_name        #3
    echo "image_name:"$image_name    #4
    EOF
    

    为什么调用这个脚本时,传递 4 个参数了。但是 1,2,3,4 4 个地方输出都为空呢?顺便请教下 efo 里面使用变量和给变量赋值有什么需要注意的地方?谢谢!

    脚本的作用是使用传进来的参数登陆远程主机,然后根据参数做一些部署相关的操作。

    3 条回复    2018-10-26 11:52:23 +08:00
    jasonyang9
        1
    jasonyang9  
       2018-10-26 11:45:57 +08:00
    ```
    << "EOF"

    ...

    EOF
    ```

    写法是 Here doc 吧?这些内容都被发送到那个 SSH 命令作为它的输入了,stdin。

    执行这个脚本的机子是看不到这些 echo 内容的。

    是不是这个意思?
    spensersheng
        2
    spensersheng  
       2018-10-26 11:49:57 +08:00
    1. 参数为何为空,需要你给出如何调用的命令行例子。
    2. 这里使用了“ EOF ”,会导致 HERE 文档里面所有的变量转义$失效。参考下面的区别:
    a=4
    cat << EOF

    echo $a

    EOF


    a=4
    cat << "EOF"

    echo $a

    EOF
    spensersheng
        3
    spensersheng  
       2018-10-26 11:52:23 +08:00
    另外,纯 shell 不推荐做复杂的 ssh 操作,建议使用 expect/tcl 或者 python、perl,ruby 之类的东东替代。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   943 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:47 · PVG 04:47 · LAX 13:47 · JFK 16:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.