2014-01-28 53 views
-1

我必須在運行時爲abc.sh腳本傳遞的路徑會提示它..我想下面的expect腳本來實現這一點,如何在Linux期望腳本中傳遞參數表格perl?

#!/usr/bin/expect -f 
set force_conservative 0 
if {$force_conservative} { 
    set send_slow {1 .1} 
    proc send {ignore arg} { 
     sleep .1 
     exp_send -s -- $arg 
    } 
} 
spawn abc.sh 
match_max 100000 
expect -exact "Please enter path : " 
send -- $path 
expect -exact "\r 
expect eof 

需要你的幫助 - 我怎樣才能通過$路徑值在運行時調用像這樣?

expect script.exp $path 

感謝,

+0

這與Perl有什麼關係? – toolic

+0

如果我理解這個問題是正確的,那麼你想在一個perl腳本中使用一個路徑變量來調用這個exp腳本,就像在最後一行中一樣?假設你的路徑存儲在你的perl腳本中的變量'$ path'中,我想你會尋找'system'expect script.exp $ path「;'?或者完全不同的東西。或者你想用本機perl腳本替換exp腳本?在這種情況下,http://search.cpan.org/~rgiersig/Expect-1.15/Expect.pod是你的朋友。 – DeVadder

+0

是DeVadder謝謝,是的,我正在尋找系統「expect script.exp $ path」; – smriti

回答

1

Expect是回答

使用send -- $argvexpect腳本,因爲持有的命令行參數。

舉個例子,我有這個方便的expect腳本與ssh命令交互當管理員禁用愣神公用密鑰驗證:如果你只需要的

部分

#!/usr/bin/expect -f 
set timeout -1 
set send_human {.6 .1 1.6 .1} 
eval spawn $argv 
match_max 100000 
expect { 
    -re "[email protected](\[0-9A-Za-z_\\-\\.\]+)'s password: " 
    { sleep 0.6 ; send -- "PASSWORD" ; sleep 0.1 } 
interact 

使用結構,如[lrange $argv 0 $argc]

Perl回答

使用system 'script.exp' $path撥打script.expperl腳本,假設使用chmod等,大致就像DeVadder所說的那樣沒有引號。如果您的perl腳本希望終止,請使用exec。閱讀關於perl命令的信息,運行man perlfunc

+0

謝謝傑夫,那麼我應該如何期待script.exp/x/y。/x/y是路徑嗎? – smriti

+0

我需要在像這樣的perl腳本中調用此腳本 - 期望script.exp。我需要像下面這樣傳遞這個argv --expect script.exp/x/y/z。我可以那樣做嗎? – smriti

+0

DeVadder的評論已經回答了,但我已經更新了這個答案來詳細說明。 –