2011-08-12 24 views
1

我有一个bash脚本,基本上应该像如下:获取用户输入而SSH'ed到另一个盒子

  • 得到用户的版本号,并把它在buildNum VAR

  • 准备的通过调用本地脚本buildNum建立本地机器上,因为它的参数

  • SFTP的坦然zip文件到远程服务器1

  • 这样做:

ssh -v $server1 <<EOF 
rm -rvf path1-on-remote-server1/* 
cd path2-on-remote-server1 
unzip ../prepped-zip-file-$buildNum.zip 
exit 
EOF 
  • SFTP的坦然zip文件到远程服务器2

我遇到的问题是,在4号的第四步,$ buildNum不被远程服务器所知,并且失败。

我尝试以下两种解决方案,并都失败:

  1. 使用双引号"unzip ../prepped-zip-file-$buildNum.zip"这就造成了"unzip ../prepped-zip-file-11.6.zip: Command not found.

  2. 试图从用户其失败的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

您可能还想使用sshfs:http://en.wikipedia.org/wiki/SSHFS – Antti

回答

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进行测试,该变量已经得到代入此文档,就像整个文件已经在命令行上。删除外壳从不需要知道首先存在变量。

实际上,您可能希望在ssh命令行上使用远程命令,而不是重定向标准输入。这将是情况下更稳健一些它的零件的意外决定尝试从标准输入读取:

ssh -v $server1 "rm -rvf path1-on-remote-server1/* 
    cd path2-on-remote-server1 
    unzip ../prepped-zip-file-$buildNum.zip" 

(请注意,多行双引号字符串都还可以使用bash)。

+0

我尝试了您的建议解决方案,它的工作完美。非常感谢。 – Codrguy

+0

+1“使用命令行”。 (在SSH协议中使用'exec'通道而不是'shell'通道,仅供参考。) –

0
#!/bin/sh 
printf "Enter Build Number: " 
read BUILD_NUM 
cat << EOF | ssh $server1 
hostname 
echo "${BUILD_NUM}" 
uptime 
EOF 

这对我很有用。

相关问题