在我的腳本中 - 我創建了一個sftp連接。如何在建立連接的SFTP連接中使用CD - Shell腳本
我之前從用戶那裏讀取了一些目錄值,並且一旦建立了sftp連接,我嘗試cd到我從用戶那裏獲得的目錄。
但它不工作,可能是因爲提示符進入SFTP連接建立的服務器。
在這種情況下如何使它工作?
在我的腳本中 - 我創建了一個sftp連接。如何在建立連接的SFTP連接中使用CD - Shell腳本
我之前從用戶那裏讀取了一些目錄值,並且一旦建立了sftp連接,我嘗試cd到我從用戶那裏獲得的目錄。
但它不工作,可能是因爲提示符進入SFTP連接建立的服務器。
在這種情況下如何使它工作?
它以什麼方式不起作用?要更改遠程服務器上的目錄,請使用「cd」命令。要更改本地服務器上的目錄,請使用「lcd」命令。閱讀「man sftp」。
如果這是我的腳本的一部分sftp $ uid @ $ ip cd $ path - 一旦執行了sftp命令,提示會轉到執行sftp命令的服務器。所以它不會在腳本的下一行中執行cd/lcd命令 – vvshack 2012-07-05 14:56:44
如果你正在試圖改變機器的目錄,嘗試LCD
如果這是我的腳本的一部分sftp $ uid @ $ ip cd $ path - 一旦執行了sftp命令,提示會進入服務器在其上執行sftp命令。所以它沒有在腳本的下一行執行cd/lcd命令 – vvshack 2012-07-05 14:53:43
如果您的腳本做,因爲你的地方狀態,在此頁面,
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
所以,我建議您的解決方案是:
您的腳本會做這樣的事情:
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
SFTP協議沒有「當前目錄」的概念,因此你不能在任何地方「cd」。控制檯SFTP客戶端在內部模擬類似於chdir的命令。 – 2012-07-05 15:39:35