2012-07-05 124 views
1

在我的腳本中 - 我創建了一個sftp連接。如何在建立連接的SFTP連接中使用CD - Shell腳本

我之前從用戶那裏讀取了一些目錄值,並且一旦建立了sftp連接,我嘗試cd到我從用戶那裏獲得的目錄。

但它不工作,可能是因爲提示符進入SFTP連接建立的服務器。

在這種情況下如何使它工作?

+1

SFTP協議沒有「當前目錄」的概念,因此你不能在任何地方「cd」。控制檯SFTP客戶端在內部模擬類似於chdir的命令。 – 2012-07-05 15:39:35

回答

-1

它以什麼方式不起作用?要更改遠程服務器上的目錄,請使用「cd」命令。要更改本地服務器上的目錄,請使用「lcd」命令。閱讀「man sftp」。

+0

如果這是我的腳本的一部分sftp $ uid @ $ ip cd $ path - 一旦執行了sftp命令,提示會轉到執行sftp命令的服務器。所以它不會在腳本的下一行中執行cd/lcd命令 – vvshack 2012-07-05 14:56:44

0

如果你正在試圖改變機器的目錄,嘗試LCD

+0

如果這是我的腳本的一部分sftp $ uid @ $ ip cd $ path - 一旦執行了sftp命令,提示會進入服務器在其上執行sftp命令。所以它沒有在腳本的下一行執行cd/lcd命令 – vvshack 2012-07-05 14:53:43

2

如果您的腳本做,因爲你的地方狀態,在此頁面,

sftp [email protected]$host cd $directory 

,然後嘗試做別的事情,像:

sftp [email protected]$host FOO 

該命令FOO在同一目錄執行,因爲您正在執行新的命令,它將創建到SFTP服務器的新連接。

你可以做的是使用SFTP的「批處理文件」選項,即構建一個文件它包含所有你想SFTP做了一個連接,例如命令:

$ cat commands.txt 
cd foo/bar 
put foo.tgz 
lcd /tmp/ 
get foo.tgz 

然後,你就可以告訴SFTP連接於一體,以執行這些命令,通過執行:

sftp -b commands.txt [email protected]$host 

所以,我建議您的解決方案是:

  • 隨着用戶的輸入,創建一個包含所有的命令在一個SFTP連接來執行的臨時文本文件,然後
  • 使用執行SFTP該臨時文本文件保存爲「批處理文件」

您的腳本會做這樣的事情:

echo "Directory in which to go:" 
read directory 
temp=$(mktemp /tmp/FOOXXX) 
echo "" > $temp 
echo "cd $directory" >> $temp 
# other commands 
sftp -b $temp [email protected]$host 
rm $temp