我有一个bash脚本,基本上应该像下面这样工作:
从用户获取内部版本号并将其放入buildNum var
通过使用buildNum作为参数调用本地脚本来准备本地计算机上的构建
将准备好的zip文件sftp到远程server1
执行此操作:
ssh -v $server1 <<EOF
rm -rvf path1-on-remote-server1/*
cd path2-on-remote-server1
unzip ../prepped-zip-file-$buildNum.zip
exit
EOF
我遇到的问题是,在第4步的第四步,远程服务器不知道$ buildNum,它就失败了。
我尝试了以下两种解决方案,但都失败了:
使用双引号"unzip ../prepped-zip-file-$buildNum.zip"
导致"unzip ../prepped-zip-file-11.6.zip: Command not found.
试图在SSH会话期间再次从用户那里获取内部版本号,因为甚至没有等待我的输入并查找名称末尾没有内部版本号的zip文件,因为var是空的,
ssh -v $server1 <<EOF
rm -rvf path1-on-remote-server1/*
cd path2-on-remote-server1
echo "enter build num once more: "
read bNum
unzip ../prepped-zip-file-$bNum.zip
exit
EOF
关于如何实现我的目标的任何建议。
提前致谢
答案 0 :(得分:3)
你确定这不起作用吗?
ssh -v $server1 <<EOF
rm -rvf path1-on-remote-server1/*
cd path2-on-remote-server1
unzip ../prepped-zip-file-$buildNum.zip
exit
EOF
当我在我的机器上尝试使用cat
而不是ssh -v $server1
进行测试时,变量确实被替换为here-document,就好像整个文档都在命令行上一样。删除shell永远不需要知道首先有一个变量。
实际上,您可能希望在ssh命令行上提供远程命令,而不是重定向标准输入。如果它的某些部分意外地决定尝试从stdin读取,那么这将更加强大:
ssh -v $server1 "rm -rvf path1-on-remote-server1/*
cd path2-on-remote-server1
unzip ../prepped-zip-file-$buildNum.zip"
(注意多行双引号字符串可以使用bash)。
答案 1 :(得分:0)
#!/bin/sh
printf "Enter Build Number: "
read BUILD_NUM
cat << EOF | ssh $server1
hostname
echo "${BUILD_NUM}"
uptime
EOF
这适合我。