请教一个 shell 相关的问题

2018-10-26 10:41:04 +08:00
 itertools
#!/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 里面使用变量和给变量赋值有什么需要注意的地方?谢谢!

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

1021 次点击
所在节点    问与答
3 条回复
jasonyang9
2018-10-26 11:45:57 +08:00
```
<< "EOF"

...

EOF
```

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

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

是不是这个意思?
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
2018-10-26 11:52:23 +08:00
另外,纯 shell 不推荐做复杂的 ssh 操作,建议使用 expect/tcl 或者 python、perl,ruby 之类的东东替代。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/501308

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX