2011-08-12 25 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 

這對我很有用。

相關問題