Shell-Script
Unix AIX 將變數和參數傳遞給期望和生成
我正在編寫一個腳本來scp一些文件,但需要通過使用者或另一個腳本作為參數傳遞文件位置
#!/usr/bin/expect set FILEPATH1 $1 spawn sh "scp $FILEPATH1 $USER@$HOST:/destination/files" set pass "pass123" expect { password: {send "$pass\r"; exp_continue} }
在生成之前和 #!/usr/bin/expect 之前也嘗試過這個
FILEPATH1=$1
這不是你想要的:
set FILEPATH1 $1
Tcl(和期望)不使用 shell 風格的
$1, $2, ...
方式來訪問命令行參數。您想使用全域$argv
列表:set FILEPATH1 [lindex $argv 0]
此外,您的 spawn 呼叫不正確。
sh
將尋找一個名為“scp $ FILEPATH1 $ USER@$HOST:/destination/files"。你不需要 shell 來生成 scp:spawn scp $FILEPATH1 $USER@$HOST:/destination/files
現在,USER 和 HOST 來自哪裡?它們是環境變數嗎?如果是這樣的話:
spawn scp $FILEPATH1 $env(USER)@$env(HOST):/destination/files
而且,在腳本退出之前,您無需等待傳輸實際完成。做這個:
expect password: send "$pass\r" set timeout -1 expect eof
我假設您只被提示輸入一次密碼。如果必須多次輸入,那麼
expect { password: { send "$pass\r" set timeout -1 exp_continue } eof }